智能指针析构函数争用条件
Smart Pointer Destructor Race Condition
给定下面的析构函数:
~shared_ptr(){
*_ref_count--;
if(*_ref_count==0){
delete _p;
delete _ref_count;
}
}
如果
_ref_count == 2
释放智能指针的两个线程会导致双重删除(崩溃(和/或根本不删除(内存泄漏(吗?
简单的答案
是的,存在竞争条件。两个线程可以同时递减和测试。
调查 std::atomic 或包装在互斥锁中或使用 std::shared_ptr(最佳答案(
相关文章:
- C++11:我可以显式调用基类析构函数来销毁派生类吗
- C++:显式调用模板参数的 typedef 的析构函数
- 智能指针析构函数争用条件
- 通过显式调用对象的析构函数和构造函数来重新创建对象
- 防止派生析构函数中的 vtable 数据争用
- 显式调用类的析构函数时出现错误
- 为什么msvc编译器在显式调用析构函数时会发出未使用的变量
- 用return语句结束析构函数安全吗
- 是否可以在另一个类的实例中显式调用对象的析构函数?
- 显式调用析构函数时被调用两次
- 赋值重载显式调用析构函数(在执行其他二进制重载运算符之后)
- C++03 12.4/12对通过指针显式调用基类析构函数有何说明
- 在不先显式调用析构函数的情况下,在旧对象上使用placement new是否危险
- 我是否正确构建了这些引用和指针函数?如果是,我该如何显式调用我的析构函数
- 根据C++标准,显式调用构造函数和析构函数是否安全
- 我们是否需要为分配"placement new" "simple POD classes"显式调用析构函数?
- 显式调用析构函数时的 C++ 内存错误 ("double free or corruption"
- 显式调用子析构函数也调用父析构函数
- 用另一个虚拟析构函数覆盖"empty"虚拟析构函数有什么害处吗?
- 在clang中显式调用伪析构函数