如果有一个类是 myClass , 关于下面代码正确描述的是?

来源:互联网 发布:plc简单编程实例 编辑:程序博客网 时间:2024/05/01 23:01
如果有一个类是 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,形成无限递归,造成堆栈溢出,系统崩溃。
阅读全文
0 0
原创粉丝点击