首页 > 其他分享 >SmartPointer

SmartPointer

时间:2024-08-26 18:48:29浏览次数:2  
标签:string SmartPointer auto new shared unique ptr

1.Smartpointer是指针类,会自动释放指针分配的空间
2.包括auto_ptr,shared_ptr,unique_ptr
3.使用方法
(1)包含#include
(2)实例化
auto_ptr pd(new double);
auto_ptr ps(new string);
unique_ptr pdu(new double);
shared_ptr pss(new string);
(3)显式类型转换
shared_ptr pd;
double *p_reg=new double;
pd=p_reg;//不可以
pd=shared_ptr(p_reg);//可以
shared_ptr pshared=p_reg;//不可以,隐式类型转换
shared_ptr pshared(p_rgs);//可以,显式类型转换
(4)
auto_ptr ps (new string("Hello"));
auto_ptr vocation;
vocation=ps;
//上述代码会导致ps指向的内存空间被释放两次,产生错误
解决方法
a.重载赋值运算符使其用深拷贝方式赋值
b.禁止在对象未释放时使用赋值运算符
c.用计数器计数,shared_ptr的实现方式
(5)auto_ptr放弃对象的所有权后会无法访问对象
auto_ptr films[2]={
auto_ptr(new string("Hello")),
auto_ptr(new string("World")};

auto_ptr pwin;
pwin=films[0];//赋值后无法使用film[0]访问对象,只能使用Pwin访问对象
}
但shared_ptr pwin;
pwin=films[0];//可以
(6)使用move方法实现unique_ptr的转换
using namespace std;
unique_ptr ps1,ps2;
ps1=demo("Uniquely special");
ps2=move(ps1);
ps1=demo("and more");
cout<<"ps2<<ps1<<endl;

unique_ptr demo(const char * s){
unique_ptr temp(new string(s));
return temp;
(7)unique_ptr通常使用new delete但可以有new[]
unique_ptr<double[]>pda(new double(5));
(8)使用auto_ptr,unique_ptr,shared_ptr于用new, delete的地方
只有Unique_ptr有new[],delete[]的用法,其他两者不行。
}

标签:string,SmartPointer,auto,new,shared,unique,ptr
From: https://www.cnblogs.com/zhongta/p/18381477

相关文章