C++中的智能指针

C++中的智能指针

智能指针的主要作用:防止未进行delete从而导致的内存泄露,使内存更加安全

智能指针的种类:

在这里插入图片描述

#include<memory>

在这里插入图片描述

使用new需要手工删除,而智能指针则不需要;

在这里插入图片描述

e1不再拥有e2,为空指针;e1 拥有权转移到e2;

example1:

#include<iostream>
#include<memory>
using namespace std;
class Entity{
    public:
       Entity() { puts("Entity created!"); }
       ~Entity() { puts("Entity destoryed!"); }
};
void ex1() {
    puts("----------------"); 
    puts("Entering ex1");
    {
        puts("Entering ex1::scope1");
        auto e1=std::make_unique<Entity>();
        puts("Leaving ex1::scope1");
    }
    puts("Leaving ex1");
};

int main() {
  ex1();
  return 0;
}

results:

----------------
Entering ex1
Entering ex1::scope1
Entity created!
Leaving ex1::scope1
Entity destoryed!
Leaving ex1

example2

void foo(std::unique_ptr<Entity>) { 
    puts("Entering foo");
    puts("Leaving foo");
}
void ex2() { 
    puts("--------------"); 
    puts("Entering ex2");
    auto e1 = std::make_unique<Entity>();
    foo(std::move(e1));
    puts("Leaving ex2");
}

results:

--------------
Entering ex2
Entity created!
Entering foo
Leaving foo
Entity destoryed!
Leaving ex2

unique_ptr的生命周期
在这里插入图片描述

在任何时刻,只能由一个对象或一个函数拥有它。

shared_ptr的生命周期

在这里插入图片描述

主要用在多线程场景中,对于shared_ptr,在任何时刻,可以有多个对象和多个函数拥有它,当use_count变为0,最后一个拥有者被析构,生命周期结束。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

总结:和new/delete说再见;用智能指针代替原始指针

尽可能多用std::unique_ptr相比于std::shared_ptr

参考视频:https://www.bilibili.com/video/BV1fK411H7CA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纷繁中淡定

你的鼓励是我装逼的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值