我的对象创建了一个线程,该线程在其生命周期中修改了对象创建者。问题是,线程在销毁时不应该调用对象方法。我已经找到了一些解决方案,我想知道这是否是最好的。测试对象是否未被删除
class A
{
shared_ptr<int> guard = make_shared<int>(0);
public:
weak_ptr<int> getGuard() { return guard; }
void method() {}
A()
{
thread([this]
{
const auto &guard = getGuard();
while(!guard.expired())
method();
});
}
};
您是否打算分离创建的线程,以便线程不会阻塞'A'的构造函数? –
是的,在现实生活中,线程构造不会阻塞主线程。说实话,新的线程甚至没有在构造函数中创建。我只是试图简化示例。 –