作个记录吧,免得以后又忘了。
在析构函数中删除指向this的指针会发生什么情况呢?这个题目记不清是在哪看到的。于是自己测试了一下。
新建一个类,内中包含一指向该类对象的指针
class DelClassPtr {
public:
DelClassPtr();
virtual ~DelClassPtr();
private: DelClassPtr *ptr; //指向类对象的指针。
};
DelClassPtr::DelClassPtr() {
ptr = this; //使ptr指向this指针。
}
DelClassPtr::~DelClassPtr() {
cout<<"Deconstruct"<<endl;
delete ptr; //在析构函数中delete ptr指针。
}
int main(int argc, char *argv[])
{
DelClassPtr ptr; //测试
}
测试结果:
Deconstruct
Deconstruct
Deconstruct
…………
不断调用析构函数。最终程序terminated被终止。
在main中,先调用类的构造函数,然后超 出main函数范围时,调用其析构函数,析构函数中先打印再delete,delete会调用类的析构函数,于是又进入析构函数中,再打印,再delete……如此陷入死循环。最终被终止。