c ++返回已删除对象的方法

c++ returning into method of deleted object

这是 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;}
};

是否可以假设,只要不再与前一个对象的内存位置进行任何交互,返回到过期对象的方法就会正常进行?

可以满足:

  1. 对象必须是用 new 创建的。 (请注意,放置 new 之后的 delete 是不行的)。

  2. 调用delete this;后不要调用任何成员函数或访问成员数据(因堆栈展开而重新进入的函数可以)。

  3. 不要尝试将指针类型分配给 this

因此,就您而言,没有问题(假设您符合 1)。

不会有什么不好的事情发生。当然还有明显的需要注意的地方 like:

  • 确保 this 指向的对象是用 new 分配的。
  • B()之后不要调用任何其他成员函数并且在B()之后不要访问任何成员变量。
  • 不要对 B() 之后的任何内容使用 this,不,甚至指针本身也不行。