我可以从类方法中调用析构函数吗?

say*_*aee 8 c++ destructor

我有一个类似下面的Thread类

class Thread {
public:
  Thread();
  ~Thread();
  void start();
  void stop();
}
Run Code Online (Sandbox Code Playgroud)

所以我需要从stop()方法调用析构函数,这是一个很好的方法吗?

mas*_*oud 7

delete this;
Run Code Online (Sandbox Code Playgroud)

不过要小心.您不应再使用已删除的对象this和非静态成员.

 

另一种方法是调用析构函数

~Thread();
Run Code Online (Sandbox Code Playgroud)

 

但问题是,为什么需要调用析构函数?!这不符合逻辑.您可以编写代码来管理私有方法中的资源并调用它.

  • 如果对象可能在堆栈中,则无法使用delete this.但是,有时候有些对象永远不会只是堆栈.我认为这个主题在C++ FAQ中 (4认同)

小智 5

Er'body 说不要delete this从成员函数内调用,而是通知所有者该对象已准备好被删除。

我有一项服务可以创建工作人员,但在创建工作人员后并不关心他们。

从服务类内部:

Worker* w;
[...]
while (1) {
  [...]
  w = new Worker();
  [...]
}
Run Code Online (Sandbox Code Playgroud)

然后从工人阶级内部:

void Worker::doWork() {
  [...]
  [...]
  delete this;
}
Run Code Online (Sandbox Code Playgroud)

w服务类所做的就是创建新的工作人员,因此在工作人员类之外,除了每次创建新工作人员时都会丢弃的指针之外,没有对工作人员的引用。

在这种情况下,我认为当工作人员没有更多工作要做时,在工作人员内部调用是有意义的delete this(只要delete this;是最后一条语句doWork()并且之后没有连续的成员调用)doWork()

然而,如果您存储创建的工作人员的每个实例,则情况不再如此。