本文共 831 字,大约阅读时间需要 2 分钟。
通常通常情况下,delete操作符不应该用于删除this指针。但是,一旦使用了delete this, 则需要考虑到下面的这些情况。
1) delete操作符只允许与使用new分配的对象配套使用
如果对象是用new创建的,则可以使用delete this, 否则会导致未知的行为。具体可参考本人之前的。
class A{ public: void fun() { delete this; }};int main(){ //下面的3行是正常的 A *ptr = new A; ptr->fun(); ptr = NULL // 避免野指针 //下面的2行会导致异常 A a; a.fun(); return 0;}
2) 一旦this指针被delete, 则这个对象的任何成员都不能再被访问
#includeclass A{ int x; public: A() { x = 11;} void fun() { delete this; //下面这行可能会导致异常 std::cout<
在程序设计中,尽量不使用delete删除this指针,可以采用其它方式来释放资源。
3) 静态成员的访问不受this影响
因为静态成员不需要特定对象来访问,所以即使this指针被删除后,类中的静态成员任然可以正常访问。
见下面例子:
#includeclass Test{public: void func() { delete this; } static int a;};int Test::a = 11;int main(){ Test *obj = new Test; obj->func(); std::cout<<"a = "<
编译正常,输出:
a = 11
转载地址:http://jqeji.baihongyu.com/