0
我有以下兩個函數,第一個崩潰但第二個運行正常。 我知道,對於第一個,run()返回時對象被銷燬,但線程仍在執行它的work()函數,這可能會導致未定義的行爲。在boost線程中調用一個類的成員函數
但爲什麼第二個工作?如果我們把這個對象包裝在一個shared_ptr中,它會比那個線程活躍起來?
請賜教。謝謝。
void run() {
Object object();
boost::thread t(&Object::work, &object);
}
void run() {
std::shared_ptr<Object> object_(new Object());
boost::thread t(&Object::work, object);
}
其中是綁定表達式? t(&Object :: work,&object)隱式調用bind? – jiawen
@jiawen是的。對不起,這可能會更清晰。實際上,不需要使用'boost :: bind',但是'std :: thread'構造'std :: bind'是以相同的方式指定的。這也意味着如果你想綁定引用,你需要'boost :: ref(object)'(或'std :: ref(object)') – sehe