如何安全地删除析构函数中的线程指针?

lic*_*hgo 5 c++ multithreading

说,我有一个C++类,包括一个线程指针作为成员变量.线程一直运行,直到程序退出.如果我删除了析构函数中的指针,那么该时刻线程似乎尚未完成?管理这个或任何技巧的最佳做法是什么?

示例代码:

class Car {
public:
    Car();
    ~Car();
private:
    boost::thread *m_runningThreadPtr;
};


Car::Car() {
    m_runningThreadPtr = new boost::thread();
}

Car::~Car() {
    delete m_runningThreadPtr;    // The thread should be still running now. 
                                  // Problematic if it was deleted here?
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ter 1

默认情况下,terminate()如果线程仍在运行,析构函数将调用杀死该线程,这是否安全取决于线程当时正在做什么。如果您想等待线程完成,您可以join()在删除它之前调用,并使用某种同步系统(甚至只是一个全局标志)来告诉线程退出。