智能指针析构函数竞争条件

时间:2017-08-24 16:25:11

标签: c++ smart-pointers race-condition

鉴于下面的析构函数:

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

如果

  

_ref_count == 2

释放智能指针的两个线程会导致双重删除(崩溃)和/或根本没有删除(内存泄漏)以及如何?

1 个答案:

答案 0 :(得分:0)

简单回答

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

调查std :: atomic或包装在互斥锁中或使用std :: shared_ptr(最佳答案)