我有我傳遞到一個線程像這樣的圖形對象:飼養參考活着後,被傳遞到線程
void MyClass::execute_subqueries(Graph& g, vector<query>&& queries) {
for (size_t i = 0; i < queries.size(); i++) {
threads.emplace_back(thread(my_thread, ref(g), queries[i]));
}
}
我想使圖形對象g的副本,因爲我將修改這是因爲我的線程正在運行。我只想創建一個副本,並將引用傳遞給我在for循環中啓動的所有線程。我不想爲每個線程創建一個副本,因爲Graph很大,克隆它很昂貴。
問題是,我無法弄清楚如何保持我的圖形對象活着。我想在我傳入參考後,Graph對象被取消分配,我的線程不會產生我期望的結果。什麼是這樣做的好方法?
'ref()'避免複製圖形。你的第二個變種(愚蠢的,因爲它可能是使用全球)應該雖然工作,雖然不完整的代碼使得無法確定。建議:使用'shared_ptr'。 –
也許你應該解釋*爲什麼*你想製作一個對象的副本?您嘗試解決的*實際*和*原始*問題是什麼?請[閱讀關於XY問題](http://xyproblem.info/),你的問題是一個很好的例子。 –
@UlrichEckhardt哦,你說得對。它確實有用!哎呀,我這樣做,我認爲和我上面的例子一樣,但事實並非如此。我會編輯我的問題,以尋求一種好的方法來做到這一點。 – Duncan