指针指针--shared_ptr简单实用方法


 1 #include <iostream>
 2 #include <tr1/memory>
 3 
 4 using namespace std;
 5 using std::tr1::shared_ptr;
 6 
 7 int main()
 8 {
 9     {
10         shared_ptr<double> pp(new double(22.22));
11         {
12             shared_ptr<double> pp_copy = pp;
13             *pp_copy=11.11;
14         }//在这个作用域中pp_copy会自动销毁,但是分配给pp的double不会别销毁。
15         cout<<"pp="<<*pp<<endl;
16     }//此时pp会自动销毁,动态分配的double会被销毁,因为已经没有指针指向它。
17     return 0;
18 }
复制代码
  其实只是看上面的代码,觉得好像没有实际的作用。
 
复制代码
 1 int main()
 2 {
 3     double * pp = new double(22.22);
 4     {
 5         double * pp_copy = pp;
 6         *pp_copy=11.11;
 7         delete pp_copy;
 8     }
 9     cout<<"pp="<<*pp<<endl;//输出的数值是脏数据 pp成了悬垂指针
10     return 0;
11 }
复制代码
  到这里你可能会说那个delete不用不就行了?其实是的。只要小心使用delete就行。可是有没有想过,但代码量很大的时候,就不知道是不是要delete了,这就会造成内存泄漏了。
 
1     double * pp = new double(22.22);
2     double * pp_copy = new double(22.22);
3     //delete pp_copy;
4     pp_copy = pp;
5     *pp_copy=11.11;
  就像这样如果没有delete就会内存泄漏。如果是使用智能指针,那么执行上面第4行语句时,会释放第二行分配的内存。
 
  总结: 智能指针是为了实现类似于 Java中的垃圾回收机制(gc)。Java的垃圾回收机制使程序员从繁杂的内存管理任务中彻底的解脱出来,在申请使用一块内存区域之后,无需去关注应该何时何地释放内存,Java将会自动帮助回收。但是出于效率和其他原因(可能C++设计者不屑于这种傻瓜氏的编程方式),C++本身并没有这样的功能,其繁杂且易出错的内存管理也一直为广大程序员所诟病。<<引用>>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值