1.为什么需要delete this?
delete this,可以让某种类型的对象拥有自杀的能力。有些设计模式,如状态模式,在状态转换可能需要使用delete this。
2.使用delete this使用的注意事项
2.1要保证对象被分配到heap内,this对象是必须是用 new操作符分配的(亦不能用placement new,因为无法确定内存位置是否在heap内)
2.2delete this后,不能访问该对象任何的成员变量及虚函数(delete this回收的是数据,这包括对象的数据成员以及vtable,不包括函数代码);
2.3delete this后,不能再访问this指针。换句话说,你不能去检查它、将它和其他指针比较、和 NULL比较、打印它、转换它,以及其它的任何事情;
3.如何要求对象产生于Heap内
根据《More effective C++》书中条款27,保证以上禁忌列表基本手段:
3.1将析构函数protected化,保证继承有效,同样保证对象必须使用new在堆上分配内存;
3.2在基类中提供型如destroy()函数,里面仅有一句delete this--以保证第三方能够将分配的内存回收;
void destory const() {delete this;}