【发布时间】:2018-02-02 15:16:54
【问题描述】:
给定下面的析构函数:
~shared_ptr(){
*_ref_count--;
if(*_ref_count==0){
delete _p;
delete _ref_count;
}
}
如果
_ref_count == 2
两个线程释放智能指针会导致双重删除(崩溃)和/或根本不删除(内存泄漏)吗?
【问题讨论】:
-
这是您的代码还是来自 c++ 标准库的摘录?
-
_ref_count的类型是什么?是atomic吗? -
即使
_ref_count是原子的,仍然可能发生双重删除。 -
是的 - 如果您打算在多线程环境中使用它,就会出现竞争。
-
@patatahooligan:没有
标签: c++ smart-pointers race-condition