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