C++智能指针auto_ptr(一)
来源:互联网 发布:rar密码破解 知乎 编辑:程序博客网 时间:2024/06/06 11:04
在我们编写大型工程时,用new动态申请内存时,必须要用delete去释放。但若是出现异常时,我们不能保证申请的内存都被释放,这时我们需要一个在适当的时候自动释放的指针。这里我们引入智能指针。
智能指针:
(1)智能指针不是指针,而是一个类。类里封装了能够完成资源初始化的构造函数,析构函数完成对资源的释放。(这种思想方法称为RAII:资源分配及初始化)
(2) 智能指针是存储指向动态分配对象指针的类。除了能够在适当的时候自动删除指向的对象,其工作机制很像C++内置指针。在出现异常时,能保证正确的销毁动态分配对象,其也可以用于跟踪被多用户共享的动态分配对象。
(3)智能指针大部分用于生存期控制,阶段控制。在类内部重载operator*和operator->让智能指针看起来像是原生指针。
//重载operator* 普通指针使用 *p1=20 为让智能指针看起来与普通指针一样
T&operator*(){ return *_ptr;}
//重载operator-> 普通指针使用p1->fun() 调用函数,T*operator->(){ return _ptr;}
这里我们主要看下auto_ptr
auto_ptr:(管理权转移)
1 auto_ptr是C++标准可提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分给两个拥有者,当auto_ptr对象的生命周期结束时,其析构函数会将auto_ptr对象拥有的动态内存自动释放。即时发生异常,通过异常的栈展开过程也能将动态内存释放,auto_ptr不支持new数组。
2 包含头文件: #include<memory>
3 auto_ptr实现方法
(1)构造函数
用已经存在的指向动态内存的指针来构 造
int *p=new int(10);auto_ptr<int> sp(p);直接构造自能指针:
auto_ptr<int>sp(new int (10))(2)拷贝构造函数:利用已经存在的智能指针拷贝构造出新的智能指针
(3)赋值
(4)operator*() 和operator->()
模拟实现auto_ptr代码:
#include<iostream>using namespace std;template<class T>class AutoPtr{public://构造函数AutoPtr(T* ptr = NULL):_ptr(ptr){//cout << "AutoPtr()" << endl;}//拷贝构造函数 ap2(ap1)AutoPtr(AutoPtr<T>& ap):_ptr(ap._ptr){//管理权转移,只有一个指针指向动态内存ap._ptr = NULL;cout << "AutoPtr(AutoPtr<T>& ap)" << endl;}//赋值运算符 ap2=ap3AutoPtr<T>& operator=(AutoPtr<T>& ap){if (this != &ap){delete this->_ptr;_ptr = ap._ptr;ap._ptr = NULL;}//cout << "AutoPtr<T>& operator=(AutoPtr<T>& ap) " << endl;return *this;}//对operator* 进行重载 T& operator*(){return *_ptr;}//对operator->进行重载 T* operator->(){return _ptr;}//析构函数~AutoPtr(){if (_ptr){cout << _ptr << endl;delete _ptr;_ptr = NULL;//cout << "~AutoPtr()" << endl;}}protected:T* _ptr;};
- 【C++】智能指针auto_ptr
- C++智能指针auto_ptr(一)
- c++ auto_ptr智能指针详解
- 【C/C++和指针】auto_ptr智能指针
- C++对话系列(一)智能指针 auto_ptr再回忆
- 智能指针(auto_ptr scoped_ptr)
- 【C/C++】智能指针auto_ptr,share_ptr,unique_ptr
- 智能指针(一):STL auto_ptr实现原理
- 智能指针(一):STL auto_ptr实现原理
- 智能指针(一):STL auto_ptr实现原理
- 智能指针(一):STL auto_ptr实现原理
- 智能指针(一):STL auto_ptr实现原理
- 【C++】智能指针auto_ptr的简单实现
- C++——模版:智能指针auto_ptr
- C++:auto_ptr智能指针的用法
- 【C++】智能指针auto_ptr/unique_ptr/shared_ptr/weak_ptr!!!
- 自己写的智能指针(auto_ptr)
- 浅谈C++的智能指针(auto_ptr)
- LeetCode Two Sum
- 工厂方法模式【Factory Method Pattern】
- SQL 数据库 基础
- Memcached之——Windows下安装Memcached
- 5个强大的Java分布式缓存框架推荐
- C++智能指针auto_ptr(一)
- 斑马打印机连三菱PLC与VB.NET
- 基于矩阵合同变换算法的无向图同构识别——C++代码实现
- Git\SourceTree的安装使用
- Android 技术开篇——学习、读书指南。
- UITabBarController实现Tab切换
- 爬了3000万QQ用户数据,挖出了花千骨赵丽颖的QQ号
- Ubuntu运行scrapy报“scrapy: 'module' object has no attribute 'OP_SINGLE_ECDH_USE'错误解决方法”
- 生成随机字符串