这个结构X在C++代码中有什么问题?

0 c++ struct class

我把这个问题作为家庭作业.它编译并按预期运行,但我应该发现它有问题,尽管与const无关.

我知道这是一个结构,所以我的变量都是公开的 - 这不是问题.我想也许它与构造函数中使用的"new"有关.我很想听听你的想法.

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;
}
Run Code Online (Sandbox Code Playgroud)

Hol*_*Cat 5

你的班级违反了三级规则.

完全按照书面说明它没有做任何坏事,但看似无害的构造涉及X可能导致神秘错误(由于各种形式的未定义行为).

X a(1), b = a;
Run Code Online (Sandbox Code Playgroud)

在我的机器上,上面的行导致

*** Error in `./a.out': double free or corruption (fasttop): 0x0000000000dfec20 ***
Run Code Online (Sandbox Code Playgroud)