C++ 智能指针 shared_ptr
2014-03-14 00:48
489 查看
今天晚上去旁听了C++高级编程的课,其中提到智能指针。第一反映还以为是auto_ptr呢,一听才知道是share_ptr这个。哦,原来是C++11特性。大致的原因是auto_ptr有一点缺陷,而share_ptr比较安全。好吧,那就这个了。
先写一个简单的代码感受一下
其实只是看上面的代码,觉得好像没有实际的作用。
到这里你可能会说那个delete不用不就行了?其实是的。只要小心使用delete就行。可是有没有想过,但代码量很大的时候,就不知道是不是要delete了,这就会造成内存泄漏了。
就像这样如果没有delete就会内存泄漏。如果是使用智能指针,那么执行上面第4行语句时,会释放第二行分配的内存。
总结: 智能指针是为了实现类似于Java中的垃圾回收机制(gc)。Java的垃圾回收机制使程序员从繁杂的内存管理任务中彻底的解脱出来,在申请使用一块内存区域之后,无需去关注应该何时何地释放内存,Java将会自动帮助回收。但是出于效率和其他原因(可能C++设计者不屑于这种傻瓜氏的编程方式),C++本身并没有这样的功能,其繁杂且易出错的内存管理也一直为广大程序员所诟病。<<引用>>
运行环境: Win7 + codeblock 12.11
资料:
auto_ptr与share_ptr的区别:http://www.cppblog.com/expter/archive/2009/03/29/78270.html
悬垂指针与野指针:http://www.cnblogs.com/submarine/archive/2013/03/02/2940169.html
引用:http://blog.163.com/bbluesnow@126/blog/static/27784545201222682418694/
先写一个简单的代码感受一下
#include <iostream> #include <tr1/memory> using namespace std; using std::tr1::shared_ptr; int main() { { shared_ptr<double> pp(new double(22.22)); { shared_ptr<double> pp_copy = pp; *pp_copy=11.11; }//在这个作用域中pp_copy会自动销毁,但是分配给pp的double不会别销毁。 cout<<"pp="<<*pp<<endl; }//此时pp会自动销毁,动态分配的double会被销毁,因为已经没有指针指向它。 return 0; }
其实只是看上面的代码,觉得好像没有实际的作用。
int main() { double * pp = new double(22.22); { double * pp_copy = pp; *pp_copy=11.11; delete pp_copy; } cout<<"pp="<<*pp<<endl;//输出的数值是脏数据 pp成了悬垂指针 return 0; }
到这里你可能会说那个delete不用不就行了?其实是的。只要小心使用delete就行。可是有没有想过,但代码量很大的时候,就不知道是不是要delete了,这就会造成内存泄漏了。
double * pp = new double(22.22); double * pp_copy = new double(22.22); //delete pp_copy; pp_copy = pp; *pp_copy=11.11;
就像这样如果没有delete就会内存泄漏。如果是使用智能指针,那么执行上面第4行语句时,会释放第二行分配的内存。
总结: 智能指针是为了实现类似于Java中的垃圾回收机制(gc)。Java的垃圾回收机制使程序员从繁杂的内存管理任务中彻底的解脱出来,在申请使用一块内存区域之后,无需去关注应该何时何地释放内存,Java将会自动帮助回收。但是出于效率和其他原因(可能C++设计者不屑于这种傻瓜氏的编程方式),C++本身并没有这样的功能,其繁杂且易出错的内存管理也一直为广大程序员所诟病。<<引用>>
运行环境: Win7 + codeblock 12.11
资料:
auto_ptr与share_ptr的区别:http://www.cppblog.com/expter/archive/2009/03/29/78270.html
悬垂指针与野指针:http://www.cnblogs.com/submarine/archive/2013/03/02/2940169.html
引用:http://blog.163.com/bbluesnow@126/blog/static/27784545201222682418694/
相关文章推荐
- C++应用系列:用智能指针shared_ptr中引用计数思想进行动态内存管理
- 【C++】智能指针简述(四):shared_ptr
- C++智能指针 shared_ptr 与 weak_ptr 原理
- C++智能指针shared_ptr分析
- 【C++】智能指针的作用,模拟实现auto_ptr,scoped_ptr,shared_ptr,scoped_array,shared_array
- C++中的智能指针(1):shared_ptr 的介绍和用法
- C++智能指针--shared_ptr
- C++:智能指针之shared_ptr
- C++:Boost库智能指针_shared_ptr
- C++之智能指针shared_ptr
- C++ 智能指针shared_ptr模板实现原理
- C++:智能指针-TR1的shared_ptr和weak_ptr使用介绍
- C++简单版shared_ptr智能指针的实现
- 我所熟悉的C++智能指针auto_ptr vs shared_ptr (二)
- c++智能指针《二》 std::tr1::shared_ptr
- C++智能指针:TR1的 shared_ptr 和 weak_ptr 使用介绍
- 实战c++中的智能指针unique_ptr系列--通过unique_ptr对shared_ptr进行初始化
- C++ 智能指针的一个实现(基于模板和Shared_ptr)
- C++ 11智能指针之shared_ptr
- 【C++标准模板库笔记2】智能指针shared_ptr的简单使用