C++进阶STL-智能指针

本文介绍了C++中的智能指针,包括std::auto_ptr(已弃用)、std::unique_ptr、std::shared_ptr和std::weak_ptr。智能指针用于自动管理内存,避免内存泄露。其中,unique_ptr是独占式,shared_ptr允许多个指针共享,weak_ptr则用于解决shared_ptr的循环引用问题。
摘要由CSDN通过智能技术生成

参考1
参考2

介绍

在使用智能指针之前,一般都是用new和delete来进行内存的管理,但是一旦忘记delete,这样容易造成内存泄露。从而导致智能指针的出现,它只需要你创建,之后就不需要你管,也不需要你手动释放,到该释放的地方,它会自动释放。

  • 原理:其实智能智能是一个模板类,内部有指向模板的一个指针,释放使用析构函数进行,所以这是自动的过程。定义在<memory> 命名空间 std

四种智能指针

std::auto_ptr(已经被C++11弃用)

使用的时候会给警告:is deprecated

  • 注意:不建议使用,但是如果使用,记住它是独占式,将p2 = p1 ,那么p1 则是nullptr,如果再通过p1去操作,程序会直接崩溃


std::unique_ptr

  • 介绍:正如名字一样,它也是独占式的指针,尝试将它复制给其他指针会编译报错,但是可以通过std::move()进行操作,操作之后原先的指针也不能用,这也解释了unique的含义。
    std::unique_ptr<Person> p1(new Person(1));
    int id = p1->GetId();

    // std::unique_ptr<Person> p2 = p1; 报错
    std::unique_ptr<Person> p2 = std::move(p1);

    id = p2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值