Singleton* Singleton::instance() {
if (pInstance == 0) {
Lock lock;
if (pInstance == 0) {
Singleton* temp = new Singleton; // initialize to temp
pInstance = temp; // assign temp to pInstance
}
}
假設編譯器沒有優化冗餘溫度。 線程A進入並分配並構造了Singleton對象,該對象由temp指向。 現在A被搶先。 現在線程B獲取鎖,進入並檢查pInstance是否爲NULL。它也會創建Singleton對象並覆蓋現有的指針。我想現在有一個內存泄漏。你有什麼意見 ? 完整的數據源代碼在這裏: 代碼參考:http://erdani.com/publications/DDJ_Jul_Aug_2004_revised.pdf單線程實現多線程環境的內存泄漏
請再次閱讀您鏈接的文章。 –