如果有一个类是 myClass , 关于下面代码正确描述的是: myClass::~myClass(){ delete this; this = NULL; } 答案:无法编译通过 解析: 1.在类A的析构函数中,delete一个非A类对象通常是没有问题的; 在类A的析构函数中,delete一个类A的对象,就会造成死循环,堆栈溢出; 在析构函数外使用 delete后,应该立即给指针赋值 NULL防止野指针。 2.因为this是Myclass * const this指针,也就是说this指针指向的对象(不是指向的对象的值)不可以改变,所以给this赋值在编译期间就不会通过, 如果没有这语句的话是栈溢出,因为会不停的调用析构函数。 3.this被顶层const修饰不能修改。 删掉this=null后,在类的析构函数中调用delete this,delete this会去调用本对象的析构函数,而析构函数中又调用delete this,形成无限递归,造成堆栈溢出,系统崩溃。
转载请注明原文地址: https://www.6miu.com/read-83664.html