在範圍內,我創建一個包含線程的對象。線程被分離到對象的C-tor中。最後,我刪除了這個對象,但是這個線程在關聯的對象內存被釋放後繼續保持着。分離的線程是否保存了對象副本,還是隻引用了程序堆棧,這些程序堆棧會被進一步刪除?C++分離線程在關聯對象被刪除後繼續工作
struct test_detach {
test_detach()
: thr_(&test_detach::loop, this) {
thr_.detach();
}
void loop() {
while(true) {
cout << "loop test" << endl;
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
}
std::thread thr_;
};
int main()
{
{
test_detach *test = new test_detach;
std::this_thread::sleep_for(std::chrono::seconds(1));
delete test;
}
cout << "Sleep" << endl;;
std::this_thread::sleep_for(std::chrono::seconds(3));
cout << "Finish!" << endl;;
return 0;
}
程序輸出:
loop test
loop test
Sleep
loop test
loop test
loop test
loop test
loop test
loop test
Finish!
您應該聲明不訪問任何*類成員爲** static **的成員函數。現在,它還提供了爲什麼線程可以繼續運行並且不關心你刪除了該對象的見解。線程將自動停止的概念只是錯誤的。 –