我有以下代码。析构函数不在C++中执行
#include <string.h>
#include <iostream>
using namespace std;
class Fred
{
private:
char* _cptr;
public:
Fred()
{
_cptr = new char[strlen("Hello World") + 1];
strcpy(_cptr, "Hello World");
}
~Fred()
{
cout << "Fred::~Fred(): " << _cptr << endl;
delete _cptr;
}
void Display() const
{
cout << "Fred::Display() _cptr: " << _cptr << endl;
}
};
int main()
{
Fred* p = new Fred();
if (p == NULL)
cout << "fail" << endl;
p->Display() ;
p = NULL;
delete p;
getchar();
return 0;
}
输出 弗雷德::显示()_cptr:你好世界 009A02D8
int main()
{
Fred* p = new Fred();
if (p == NULL)
cout << "fail" << endl;
p->Display() ;
//p = NULL;
delete p;
getchar();
return 0;
}
输出 弗雷德::显示()_cptr:你好世界 弗雷德::〜弗雷德():你好世界
任何想法为什么析构函数不在第一种情况下工作(p = NULL)。
感谢 MAP
切换这些行:'p = NULL; 删除p;''删除NULL;'是一个NOP,你正在泄漏原始实例。 –
为什么呢?你并没有删除'new'返回的指针。 –
不同意“接近错字”投票 - 在我看来,OP有意用这种方式编写代码,并不理解它的含义 –