使用C++11解决内存泄露--智能指针

本文介绍了C++11中的智能指针std::shared_ptr、std::unique_ptr和std::weak_ptr,如何使用它们来管理内存并防止内存泄露。详细讲解了每个智能指针的特点和使用方法,包括初始化、指针获取、指定删除器以及注意事项。
摘要由CSDN通过智能技术生成

众所周知,C#和java中不需要开发人员自己释放内存,对象引用计数为零后.Net和Java虚拟机会对对象进行自动回收,从而防止内存泄露;但是C++语言中,在堆上分配的内存必须自己去管理,不用的时候要自己释放,如果管理不当就可能会出现内存泄露。

C++11提供了智能指针,使用智能指针后不需要用户自己释放内存空间,一旦使用时对象超出了自己的生命周期,就会进行自动释放,从而有效解决了内存泄露的问题。

在实际编程时,有三种智能指针可供使用,分别是:std::shared_ptr、std::unique_ptr和std::weak_ptr。

1 共享智能指针:std::shared_ptr

std::share_ptr指针的每一个拷贝都指向同一个对象,只有在引用计数为零时内存才会被释放。

指针声明原型为:

template <class T> class shared_ptr;

1.1 std::shared_ptr的用法

std::shared_ptr指针可以有三种方法进行初始化,分别是构造函数、辅助函数以及reset方法进行初始化化,代码如下所示:

int main () {
    std::shared_ptr<int> sp;  sp.reset (new int);       //reset函数初始化  *sp=10;  std::cout << *sp << '\n';    std::shared_ptr<int> p(new int(1));//构造函数初始化  std::cout<< *p << std::endl;  std::shared_ptr<int> foo = std::make_shared<int> (20);  std::cout<< *foo << std::endl;  return 0;}

代码运行结果为:10   1 20

从上面代码可以看出,智能指针使用方法和普通指针使用方法类似,但是智能指针不需要自己管理内存。

1.2  获取原始指

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淋风沐雨

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值