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新特性:25~27—— C++11 shared_ptr/unique_ptr/weak_ptr 智能指针
C++ 智能指针(shared_ptr/weak_ptr)源码分析