这是delete this
辩论的变体,与中间方法调用的情况有关。
基本上,如果方法A调用方法B,而方法B销毁对象,那么当从B返回时,方法A中是否会发生任何特定的事情?像这样:
struct test {
void A() {
B();
// what happens here besides being unable to dereference `this` anymore?
}
void B() {delete this;}
};
可以假设只要前一个对象的内存位置没有进一步交互,返回到过期对象的方法就会正常进行吗?
答案 0 :(得分:3)
它的好受制于:
必须使用new
创建对象。 (请注意,展示位置delete
后的new
不会很好。
调用delete this;
后不要调用任何成员函数或访问成员数据(由于堆栈展开而重新输入的函数都没问题。)
请勿尝试将指针类型指定给this
。
因此,在您的情况下,没有问题(假设您符合1)。
答案 1 :(得分:3)
什么都不会发生。当然有明显的事情需要注意:
this
已分配new
。B()
之后不访问任何成员变量。B()
之后不要使用this
,不要使用指针本身。