[modern c++] 不要对一个对象创建多个 shared_ptr

前言:

shared_ptr 可以用来自动管理实例(内存) 的生命周期,但是如果对同一个实例(内存) 创建多个 shared_ptr 则可能引起 double free 的问题。




Demo:

cpp 复制代码
#include <memory>
#include <string>
#include <iostream>

using namespace std;

class A{
public:
   ~A(){
     cout << "~A()" << endl;
   }
};

int main(){
   A *pa = new A();
   {
     shared_ptr<A> sp1 =  shared_ptr<A>(pa);
     shared_ptr<A> sp2 =  shared_ptr<A>(pa);
   }
   cout << "----" << endl;
}

上面的 实例 在 第一个 sp1 销毁的时候就已经被销毁了,后面的 sp2 会触发double free。

相关推荐
Lazionr几秒前
vector初识——从动态数组到STL核心容器
开发语言·c++
yyds_yyd_100865 分钟前
3731. 找出缺失的元素(2026.08.04)
c++·leetcode
呱呱巨基20 分钟前
CMake基础
linux·c++·笔记·学习
Tri_Function12 小时前
动态规划DP1(c++)
c++
清水迎朝阳15 小时前
客户端软件 — 用户统计方案
服务器·c++·客户端·用户统计
再卷也是菜16 小时前
C++17(下)
c++
alexwang21116 小时前
HDU 4348 详细题解
c++·算法·题解·hdu·主席树·可持久化数据结构·可持久化线段树
程序员zgh17 小时前
C++ 拷贝赋值运算符 详解
c语言·开发语言·c++
皓月斯语18 小时前
B2132 素数对
c++·算法·题解
星轨初途19 小时前
LeetCode 热题 100——day2 字母异位词分组
c++·算法·leetcode