C++智能指针模板类auto_ptr、unique_ptr、shared_ptr基本用法

智能指针主要作用是可以自动释放动态内存new分配的内存,不需要手动delete这些new分配的内存。(注意:一定要new申请的内存才能用智能指针自动释放,否则智能指针很可能无效)

一般情况用智能指针shared_ptr和unique_ptr,尽量不要用auto_ptr。假如有用auto_ptr的地方,一般可以用unique_ptr替代。其中智能智能unique_ptr为独占,表示获取得到赋值指针的所有权限,成功赋值后,赋值指针将失效。shared_ptr为共享,一般可以将独占智能指针unique_ptr转化为shared_ptr。

1.1智能指针shared_ptr用法

#include 

using std::auto_ptr;
using std::shared_ptr;
using std::unique_ptr;

shared_ptr pd;
double *p_reg = new double;
pd = shared_ptr(p_reg);	//不能直接赋值pd=p_reg,否则会编译报错
shared_ptr pshared(p_reg);	//不能直接赋值shared_ptr pshared=p_reg,否则会编译报错

1.2智能指针unique_ptr用法

unique_ptr pst1(new string ("I am string!"));	//声明后要进行初始化,申请内存空间,不能留下空指针

完整示例

#include 
#include 
#include 

using std::cout;
using std::endl;

using std::auto_ptr;
using std::shared_ptr;
using std::unique_ptr;
using std::string;

void main()
{			
    //智能指针shared_ptr用法
	shared_ptr pd;
	double *p_reg = new double;
	pd = shared_ptr(p_reg);	//不能直接赋值pd=p_reg,否则会编译报错
	shared_ptr pshared(p_reg);	//不能直接赋值shared_ptr pshared=p_reg,否则会编译报错

    //智能指针unique_ptr用法
	unique_ptr pst1(new string ("I am string!"));	//声明后要进行初始化,申请内存空间,不能留下空指针

	system("pause");
	return;
}

 

 

参考内容:

《C++ Primer Plus》(第6版)中文版  670-673页(参考:智能指针模板类)

你可能感兴趣的:(C++应用积累)