我有一个类似下面的Thread类
class Thread {
public:
Thread();
~Thread();
void start();
void stop();
}
Run Code Online (Sandbox Code Playgroud)
所以我需要从stop()方法调用析构函数,这是一个很好的方法吗?
是
delete this;
Run Code Online (Sandbox Code Playgroud)
不过要小心.您不应再使用已删除的对象this和非静态成员.
另一种方法是调用析构函数
~Thread();
Run Code Online (Sandbox Code Playgroud)
但问题是,为什么需要调用析构函数?!这不符合逻辑.您可以编写代码来管理私有方法中的资源并调用它.
小智 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()。
然而,如果您存储创建的工作人员的每个实例,则情况不再如此。
| 归档时间: |
|
| 查看次数: |
15389 次 |
| 最近记录: |