C++智能指针

**

C++智能指针

**

1.auto_ptr :
在这里插入图片描述
auto_ptr指向某个对象时,会获得这个对象的所有权,而当其删除以后,其管理的对象也会被delete;
当有另外一个auto_ptr指向该对象时,会获得这个对象的所有权,并且剥夺前一个 auto_ptr 的控制权,使其置为nullptr;
这种智能指针并不好使用,已在C++ 11中被弃用;

	int *p = new int(36);
    cout << "*p : " << *p << endl;

    auto_ptr<int> ptr(p);
    cout << "*ptr : " << *ptr << endl;

    auto_ptr<int> ptr_2;
    ptr_2 = ptr;
    cout << "*ptr_2 : " << *ptr_2 << endl;
    //cout << "ptr : " <<  *ptr << endl;
    if(*ptr) {
        cout << "ptr is not deleted." << endl;
    }else
    {
        cout << "ptr is deleted." << endl;
    }

运行结果:
在这里插入图片描述

2.unique_ptr:

在这里插入图片描述
unique_ptr 不支持复制与赋值操作, 但是可以转移所有权(通过使用std:move() 实现);

	unique_ptr<int> pt = make_unique<int>(100);
    cout << "pt : " << *pt << endl;
    // unique_ptr<int> pt1 = pt;    ERROR : pt ---> move-only
    unique_ptr<int> pt1 = move(pt);
    cout << "pt1 : " << *pt1 << endl;
	
	if(pt.get()) {
        cout << "pt has the op." << endl;
    }

    if(pt1.get()) {
        cout << "pt1 has the op." << endl;
    }

其中std::get()操作可以获得该指针;
unique_ptr 通过 std::move() 操作,转移原先指针的控制权,并将其链接到新的指针上;
在这里插入图片描述

3.shared_ptr;

在这里插入图片描述
shared_ptr 通过计数来共享对象,当引用计数为0时,对象没有被使用。可以进行析构;

在这里插入图片描述
循环引用,会导致内存泄漏问题;

4.weak_ptr :
在这里插入图片描述
weak_ptr 对 shared_ptr 形成观察者模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值