【发布时间】:2021-07-14 14:25:43
【问题描述】:
我有一个像下面这样的线程类
class Thread {
public:
Thread();
~Thread();
void start();
void stop();
}
所以我需要从 stop() 方法中调用析构函数,这是一个好方法吗?
【问题讨论】:
-
不,当对象的生命周期结束时会发生什么?描述你需要什么可能会更好(从技术上讲,可能存在一些极端情况,但你想限制你的课程只在那些极端情况下工作吗?)
-
你可以
delete this;它(如果它是一个堆栈变量),但它的风险很大。你为什么要那个?你不能在调用stop之后delete对象或使用一些智能指针吗?还是只是堆栈变量? -
@KirilKirov:
Thread在哪个堆栈上?可能不在它自己的堆栈上,也不在其他线程的堆栈上。 -
@MSalters 就这一点而言,线程与任何其他类没有任何不同。
-
@MSalters - 在两个堆栈上都有。用户可以创建对象
Thread(在它的“自己的”堆栈上),然后start将实际创建操作系统特定的线程(这将在内部创建一个线程特定的堆栈,但这没关系)。线程可以在所有私有数据成员上安全地运行,而不仅是在额外同步的情况下。我错过了什么吗?
标签: c++ destructor