auto_ptr智能指针
来源:互联网 发布:playmemories mac版 编辑:程序博客网 时间:2024/05/19 01:31
我们通常在一个函数中申请内存和释放内存时是new,delete
比如
void Test(){K* p1(new K);delete p1;}如果我们假如在delete前过早的return了或者函数结束后都没释放p1;这就引发内存泄漏。
而智能指针,就体现在了它的智能上了,它不用我们去delete,它会等待出了这个作用域会自动调用析构函数自动delete调,它里面有三个成员函数,get(),release(),以及reset()。比较常用。(所在文件<memory>)
p1.release(),就是将该指针置为NULL,但会返回没被NULL前时的指针;
p1.reset(new T(1)),重置,析构delete掉p1所指向的之前对象,new一个新的对象T(1),然后重新分配给p1。
p1.get()返回所指向的指针。
例子在下方,可以复制下来运行观察
template<typename T>void g() { // 现在,我们有了一个分配好的对象 T* pt1 = new T; // 将所有权传给了一个auto_ptr对象 auto_ptr<T> pt2(pt1); // 使用auto_ptr就像我们以前使用简单指针一样, *pt2 = 12; // 就像*pt1 = 12 // 用get()来获得指针的值 assert( pt1 == pt2.get() ); // 用release()来撤销所有权 T* pt3 = pt2.release(); // 自己删除这个对象,因为现在没有任何auto_ptr拥有这个对象 现在pt3=pt1,pt2=NULLdelete pt3; } //pt2已经被释放掉
void h() { auto_ptr<T> pt( new T(1) ); pt.reset( new T(2) ); // 删除由"new T(1)"分配出来的第一个T(2) T(1)已经被delete掉了 } // 最后pt出了作用域,第二个T也被删除了
有时间我们为防止内存泄漏我们可以使用异常捕获。
0 0
- auto_ptr C++智能指针
- 关于智能指针 auto_ptr
- auto_ptr 智能指针要点
- 智能指针auto_ptr
- C++ auto_ptr 智能指针
- stl智能指针auto_ptr
- 智能指针auto_ptr解析
- 智能指针之auto_ptr
- 智能指针auto_ptr 简介
- [转]智能指针auto_ptr
- auto_ptr智能指针
- 智能指针auto_ptr
- STL--智能指针(auto_ptr)
- auto_ptr智能指针
- auto_ptr智能指针
- 智能指针之 auto_ptr
- 智能指针 auto_ptr
- 智能指针std::auto_ptr
- 【11.13】57のTest
- struts2面试题
- 软考总结之范式及心得总结
- PHP命名空间(Namespace)的使用详解
- 04_03_Linux
- auto_ptr智能指针
- Java爬虫(3)——拼接url抓取“加载更多”内容
- 软考上午题中的计算题
- C++版本直接插入排序
- 19个方便渗透测试的Chrome扩展
- Bootstrap中的栅格栅格系统
- Hadoop性能调优
- 《Android和PHP开发最佳实践》学习笔记一:采用Eclipse开发,Apache服务器默认地址修改
- 面向对象的五大基本原则