我的對象創建了一個線程,該線程在其生命週期中修改了對象創建者。問題是,線程在銷燬時不應該調用對象方法。我已經找到了一些解決方案,我想知道這是否是最好的。測試對象是否未被刪除
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'的構造函數? –
是的,在現實生活中,線程構造不會阻塞主線程。說實話,新的線程甚至沒有在構造函數中創建。我只是試圖簡化示例。 –