C++ 智能指针的使用

智能指针类型

在C++程序中,普通变量使用栈内存,为函数运行时专用,结束后会自动释放,无须考虑内存释放问题。 但堆内存是共用的,其使用是通过指针变量的new来分配,使用delete来释放,因指针使用方便,很容易让程序员上瘾,其代价是各种原因造成的内存泄露问题,如:

  • 忘记使用delete释放指针变量
  • 指针数组,没有释放成员指针的内存
  • 指针指向一个新地址,原地址内容未释放
  • 异常处理程序,跳过了 delete 语句,致使指针未释放

等等,对服务器应用程序来说,内存泄露常常是致命的。

C++11后,STL增加了智能指针类型,主要有

  • std::shared_ptr,
  • std::weak_ptr
  • std::unique_ptr

智能指针是指针上的包装类,重载了*>等运算符。智能指针类的对象看起来像普通指针。但是,与普通指针不同,在析构函数里释放了指针,因此无须担心忘记释放指针。

unique_ptr用法

unique_ptr是智能指针最简单形式。 unique_ptr指向1个内存对象,而且是指向这个对象的唯一指针,这样可以避免出错。 但尽量不要将unique_ptr做为参数传给第3方接口函数,以避免对方以复制指针的方式来使用它。

在这里插入图片描述

使用语法

#include <memory>
using namespace std;

unique_ptr<A>  ptr(new A(初始化参数));
// 或者使用make_unique<T>() 模板函数来初始化unique_ptr
unique_ptr<A> ptr = make_unique<A>(初始化参数); 

如定义1个int 类型的unique_ptr

	int a = 99; 
	unique_ptr<int>  ptr = make_unique<int>(a);
	// std::unique_ptr x(new int(99)); 
	// *ptr为指向对象的值,ptr.get()为对象地址
	cout << *ptr << ", " << ptr.get() << endl; 

手工释放

ptr.reset(); 
ptr.reset(new int(1));     //      释放后,重新指向新地址

指向数组

unique_ptr<int[]>  x(new int[5]);    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值