c++新特性11 (12)weak_ptr

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++新特性11 (12)weak_ptr相关的知识,希望对你有一定的参考价值。

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引用的个数,但速度较慢。

以上是关于c++新特性11 (12)weak_ptr的主要内容,如果未能解决你的问题,请参考以下文章

c++新特性11 (12)weak_ptr

C++11新特性:25~27—— C++11 shared_ptr/unique_ptr/weak_ptr 智能指针

C++ 智能指针(shared_ptr/weak_ptr)源码分析

C++ 智能指针(shared_ptr/weak_ptr)源码分析

C++11 weak_ptr智能指针(一看即懂)

C++编程经验(12):C++11新特性