什么是错的C ++代码这个结构X?(What is wrong with this struct X

2019-10-28 17:32发布

我得到这个问题的家庭作业。 它编译和运行如预期,但我应该找什么不对的地方,虽然没什么用const做。

我知道这是一个结构,所以我的变量是所有的公共 - 这是没有问题的。 我想也许它关系到在构造函数中的“新”的使用。 我很想听听你的看法。

struct X
{
    explicit X(int);
    ~X();
    void Foo();
    void Bar() const;

    int m_a;
    int *m_p;
};

X::X(int a_): m_a(a_), m_p(new int(a_)){}
X::~X()
{
    delete m_p;
    m_p = NULL;
}

void X::Foo()
{
    ++m_a;
    --(*m_p);
}

void X::Bar() const
{
    std::cout<<m_a<<std::endl;
    std::cout<<*m_p<<std::endl;
    std::cout<<m_p<<std::endl;
}

void Fifi(const X& x_)
{
    x_.Bar();
}

int main (void)
{
    X x1(1);
    x1.Foo();
    Fifi(x1);
    return 0;
}

Answer 1:

你的类违犯了三个规则 。

正是因为写它不会做什么坏事,但看似无害的参与构建X可能会导致奇怪的错误(由于各种形式的未定义行为)。

X a(1), b = a;

在我的机器上面行导致

*** Error in `./a.out': double free or corruption (fasttop): 0x0000000000dfec20 *** 


文章来源: What is wrong with this struct X in C++ code?
标签: c++ class struct