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;
}
line1
和 line2
都持有一个指针。
您需要了解 line1.p
是一个单独的变量 line2.p
,即使它们指向内存中的相同地址。
假设首先调用line2
析构函数。它会将 line2.p
设置为 NULL,但这不会改变 line1.p
指向的位置。
随后调用 line1
析构函数时,它将尝试解除分配 line1.p
指向的已解除分配的数据,因此出现调试断言。
在下面的代码中我特意设置了一个指针,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;
}
line1
和 line2
都持有一个指针。
您需要了解 line1.p
是一个单独的变量 line2.p
,即使它们指向内存中的相同地址。
假设首先调用line2
析构函数。它会将 line2.p
设置为 NULL,但这不会改变 line1.p
指向的位置。
随后调用 line1
析构函数时,它将尝试解除分配 line1.p
指向的已解除分配的数据,因此出现调试断言。