2017-08-24 58 views
0

下面给出的析构函数:智能指针析构竞争条件

~shared_ptr(){ 
    *_ref_count--; 
    if(*_ref_count==0){ 
     delete _p; 
     delete _ref_count; 
    } 
} 

如果

_ref_count == 2

可以在两个线程释放智能指针事业双删除(崩溃)和/或根本没有删除(内存泄漏)以及如何?

+2

这是你的代码或从C++标准库中的提取物? – pm100

+0

'_ref_count'的类型是什么?它是“原子”吗? –

+0

@ pm100 no。它只是一个天真的实现。 – user8512572

回答

0

简单的回答

是的,有一个竞争条件。两个线程可以同时递减和测试。

调查的std ::原子或互斥体包裹或使用std :: shared_ptr的(最好的答案)

+0

这只是一个理论问题。 – user8512572

+1

这只是一个理论上的答案 – pm100