C++:智能指针模板类

三个智能指针模板:auto_ptr、unique_ptr、shared_ptr

作用:定义了类似指针的对象,将new获得的地址赋给这种对象,当智能指针过期时,这些内存将自动被释放,不需要再添加delete。

条件
1、头文件必须包含memory,#include;
2、智能指针模板位于名称空间std,std::或using namespace std;

三者的区别:
1、所有权。只能有一个智能指针可以拥有一个特定的对象。auto_ptr和unique_ptr都采用所有权策略。如果出现错误,auto_ptr结果是运行阶段崩溃;unique_ptr结果是编译时出错。如果unique_ptr是临时右值,编译器允许通过。也可以使用std::move(),将一个unique_ptr赋给另一个。所以unique_ptr优于auto_ptr。
2、引用计数。赋值时,计数加1,指针过期时,计数减1,仅当最后一个指针过期时,才调用delete。shared_ptr采用这种策略。
3、数组的使用。auto_ptr和shared_ptr用于new,不能用于new[ ];unique_ptr可以用于new和new[ ] 。

如何选择智能指针?
1、如果要使用多个指向同一个对象的指针,应选择shared_ptr。如果编译器没有shared_ptr,可使用Boost库提供的shared_ptr。
2、如果不需要多个指向同一个对象的指针,则使用unique_ptr。如果编译器没有unique_ptr,可使用Boost库提供的scoped_ptr。
3、如果需要使用new[ ],则使用unique_ptr。
4、尽量避免使用auto_ptr。

举例

auto_ptr<double> pd (new double);
shared_ptr<string> ps (new string("Hello world!");
        
unique_ptr<string> ps1,ps2;
ps1=demo("Hello world!");
ps2=move(ps1);
ps1=demo("I am fine!");
cout<<*ps2<<*ps1<<endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值