c++新特性11

c++新特性11 ,第1张

1. 用于避免shared_ptr相互指向产生的环形结构,造成的内存泄漏:“死锁”内存都没有释放。


struct A;
struct B;

struct A {
    std::shared_ptr<B> pointer;
    ~A() {
        std::cout << "A 被销毁" << std::endl;
    }
};
struct B {
    std::shared_ptr<A> pointer;
    ~B() {
        std::cout << "B 被销毁" << std::endl;
    }
};
int main() {
    auto a = std::make_shared<A>();
    auto b = std::make_shared<B>();
    a->pointer = b;
    b->pointer = a;
}

1.1 weak_ptr count是弱引用;弱引用个数不影响shared count和对象本身,shared count为0时则直接销毁。



1.2 常用方法

. expired():检查被引用的对象是否已删除。



. lock()会返回shared指针,判断该指针是否为空。



. use_count()也可以得到shared引用的个数,但速度较慢。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/577682.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存