当前位置: 首页 > article >正文

C++ 科目二 智能指针 [weak_ptr] (解决shared_ptr的循环引用问题)

shared_ptr引入的重复计数问题,导致内存泄漏

using namespace std;
class CFather;
class CSon;

class CFather {
public:
    CFather()
    {}
    void Set(shared_ptr<CSon> pson)
    {
        Pson = pson;
    }

    shared_ptr<CSon> Pson;
};

class CSon {
public:
    CSon()
    {}
    void Set(shared_ptr<CFather> pfather)
    {
        Pfather = pfather;
    }

    shared_ptr<CFather> Pfather;
};

int main()
{
    CSon *pson = new CSon();
    CFather *pfather = new CFather();
    {
        shared_ptr<CFather> shared_father(pfather);
        shared_ptr<CSon> shared_son(pson);

        shared_father->Set(shared_son);
        shared_son->Set(shared_father);

        cout << shared_father.use_count() << endl;
        cout << shared_son.use_count() << endl;
    }
    cout << "It's good to see you!" << endl;
    return 0;
}

将CFather或者CSon的shared_ptr变成weak_ptr即可避免内存泄漏问题


http://www.kler.cn/a/307359.html

相关文章:

  • 微信小程序的主体文件和页面文件介绍
  • 3D编辑器教程:如何实现3D模型多材质定制效果?
  • C++ 编程基础(6)作用域 | 6.3、类作用域
  • 学习记录:js算法(九十二):克隆图
  • 代码随想录第二十一天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
  • 向日葵软件Windows系统连接苹果系统(MacOS)的无反应问题解决办法
  • websocket消息推送修改
  • PostgreSQL的查看主从同步状态
  • 凸优化学习(3)——对偶方法、KKT条件、ADMM
  • 「C++系列」文件和流
  • 医学数据分析实训 项目四回归分析--预测帕金森病病情的严重程度
  • Java设计模式—面向对象设计原则(二) --------> 里氏代换原则 LSP (完整详解,附有代码+案列)
  • Linux 系统盘空间不足,想要将 Docker 镜像和容器数据迁移到数据盘
  • sqlgun靶场攻略
  • Mysql系列-索引简介
  • Vert.x HttpClient调用后端服务时使用Idle Timeout和KeepAlive Timeout的行为分析
  • 11.java面向对象
  • macOS上谷歌浏览器的十大隐藏功能
  • c语言中的常量定义(补充)
  • 【兼容性记录】video标签在 IOS 和 安卓中的问题
  • 队列-------
  • 英语学习交流平台|基于java的英语学习交流平台系统小程序(源码+数据库+文档)
  • EP12 分类列表元素点击跳转
  • 【云原生监控】Prometheus之PushGateway
  • 机器学习的入门指南
  • JVM HotSpot 虚拟机: 对象的创建, 内存布局和访问定位