[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。

相关推荐
ULTRA??20 小时前
moonbit关于模式匹配中的变量绑定
开发语言·c++·人工智能
小龙报20 小时前
【算法通关指南:数据结构与算法篇】树形结构遍历指南:DFS 递归深搜与 BFS 队列广搜实战解析
c语言·数据结构·c++·算法·链表·深度优先·visual studio
zmzb010320 小时前
C++课后习题训练记录Day44
开发语言·c++
qq_4335545420 小时前
C++ 二维线性DP
c++·算法·图论
aaa最北边20 小时前
前缀和算法求数组中某个区间的
c++
獭.獭.21 小时前
C++ -- STL【set/map和multiset/multimap的使用】
c++·stl·set·map·multimap·multiset
m0_6924571021 小时前
C++面向过程编程
c++·面向过程编程
waves浪游21 小时前
进程控制(中)
linux·运维·服务器·开发语言·c++
0 0 021 小时前
CCF-CSP 36-3 缓存模拟(cache)【C++】
开发语言·c++·算法
满天星830357721 小时前
【Linux】信号(上)
linux·运维·服务器·开发语言·c++