C++11:20weak_ptr弱引用的智能指针

2021-01-09 23:32

阅读:378

标签:count()   循环引用   问题   生命周期   上班   cout   weak_ptr   ptr   引用   

20、weak_ptr弱引用的智能指针

0、课前秀

  • 弱引用指针weak_ptr是用来监视shared_ptr的,不会使引用计数加1,它不管理shared_ptr内部的指针,主要是为了监视shared_ptr的生命周期。
  • weak_ptr没有重载操作符*->,因为它不共享指针,不能操作资源。
  • weak_ptr还可以用来返回this指针和解决循环引用的问题。

1、weak_ptr基本用法

  • (1)通过use_count()方法来获得当前观测资源的引用计数
shared_ptr sp(new int(10));
weak_ptr wp(sp);

cout
  • (2)通过expired()方法来判断所观测的资源是否已经被释放
shared_ptr sp(new int(10));
weak_ptr wp(sp);
if(wp.expired())
	std::cout 
  • (3)通过lock方法来获取所监视的shared_ptr
std::weak_ptr gw;
void f()
{
    if(gw.expired()) //所监视的shared_ptr是否释放
    {
        std::cout (42);
        gw = sp;
        f();
    }
    f();
}

/*
输出:
42
gw is expired
*/

2、weak_ptr返回this指针

  • 代码
struct A: public std::enable_shared_from_this
{
    std::shared_ptr GetSelf()
    {
        return shared_from_this();
    }
    ~S()
    {
        coutGetSelf();//OK
/*
输出结果
A is deleted
*/

3、weak_ptr解决循环引用问题

  • 代码
struct A;
struct B;
struct A{
    std::shared_ptr bptr;
    ~A() {cout bp(new B);
        ap->bptr = bp;
        bp->aptr = ap;
    }//Objects should be destroyed
}

ReadMe

  • 20200525上班期间开了个头,看了一点点,晚上回来后整理起来的,基本没有串起的,只是个记录,后面再看呢。

C++11:20weak_ptr弱引用的智能指针

标签:count()   循环引用   问题   生命周期   上班   cout   weak_ptr   ptr   引用   

原文地址:https://www.cnblogs.com/fewolflion/p/12960302.html


评论


亲,登录后才可以留言!