1

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

只要前一个对象的内存位置没有进一步交互,是否可以假设返回到过期对象的方法将正常进行?

4

2 回答 2

2

没关系:

  1. 该对象必须是用new. (请注意,delete跟随一个展示位置new是不行的)。

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

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

因此,在您的情况下,没有问题(假设您符合 1)。

于 2017-09-13T12:20:04.380 回答
2

不会有什么不好的事情发生。当然有一些明显的事情需要注意,比如:

  • 确保this指向的对象是用 分配的new
  • 不要在 之后调用任何其他成员函数B(),也不要在 之后访问任何成员变量B()
  • 不要this用于 之后的任何东西B(),不,甚至指针本身。
于 2017-09-13T12:20:34.490 回答