Class 对象销毁

Class objects destruction

在下面的代码中我特意设置了一个指针,p,删除后指向NULL,这样第二个对象就不能再删除它了。但是,我在 Microsoft Visual C++ 中收到以下错误对话框: Debug Assertion Failed - Expression: _BLOCK_TYPE_IS_VALID(pHead -> nBlockUse)

Full size image of the error dialog.

#include <iostream>
#include <string>
using namespace std;

class line{
public:
    line();
    ~line();
    int* p;
};

line::line(){
    p = new int;

}

line::~line()
{
    if (p != NULL)
    {
        delete p;
        p = NULL;
    }
}


int main()
{
    line line1,
        line2 = line1;
    cout << line1.p << endl << line2.p;

    cin.get();
    return 0;
}

line1line2 都持有一个指针。

您需要了解 line1.p 是一个单独的变量 line2.p,即使它们指向内存中的相同地址。

假设首先调用line2析构函数。它会将 line2.p 设置为 NULL,但这不会改变 line1.p 指向的位置。

随后调用 line1 析构函数时,它将尝试解除分配 line1.p 指向的已解除分配的数据,因此出现调试断言。