前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >share_ptr循环引用

share_ptr循环引用

作者头像
叶茂林
发布2024-07-07 08:52:08
800
发布2024-07-07 08:52:08
举报
文章被收录于专栏:叶子的开发者社区

定义一个类,这个类有一个share指针变量,创建一个share指针指向这个类实例,然后将类实例的成员变量share指针也指向这个类实例

代码语言:javascript
复制
#include <iostream>
#include <memory>

class Node {
public:
    std::shared_ptr<Node>p;
};

int main() {
    std::shared_ptr<Node>node(new Node());
    node->p=node;
    std::cout<<node.use_count();
    return 0;
}

此时这两个share指针的引用计数都是2,当node超过生命周期被析构时,node的引用计数变成1,不为0,那么node指向的类实例不会被析构,注意智能指针也是一个类,智能指针的析构和它指向的类实例的析构是两回事,程序中Node实例没有被析构导致p也不会析构

用weak指针解决循环引用问题,weak只引用资源不增加资源引用的计数

代码语言:javascript
复制
#include <iostream>
#include <memory>

class Node {
public:
    std::weak_ptr<Node>p;
};

int main() {
    std::shared_ptr<Node>node(new Node());
    node->p=node;
    std::cout<<node.use_count();
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档