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

Smart Pointer Destructor Race Condition

本文关键字:争用条件 析构函数 指针 智能      更新时间:2023-10-16

给定下面的析构函数:

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

如果

_ref_count == 2

释放智能指针的两个线程会导致双重删除(崩溃(和/或根本不删除(内存泄漏(吗?

简单的答案

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

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