auto_ptr的简单实现
来源:互联网 发布:咏春实战 知乎 编辑:程序博客网 时间:2024/05/18 01:16
#include <iostream>#include <stack>#include <stdio.h>using namespace std;template <class T>class AutoPtr{private: T *m_ptr;public: explicit AutoPtr(T *p=0): m_ptr(p){} AutoPtr (AutoPtr &a):m_ptr(a.release()){}//拷贝构造函数,将原值拷贝,并设为0 AutoPtr &operator = (AutoPtr &a) { if(this == &a) return *this; delete m_ptr; m_ptr = a.release(); return *this; } ~AutoPtr() { delete m_ptr; } T& operator *(){ return *m_ptr; } T* operator ->() { return m_ptr; } T *get() { return m_ptr; } T* release() {//返回指针,并自己设为0 T *tmp = m_ptr; m_ptr = 0; return tmp; } void reset(T *p = 0) { if (p != m_ptr) { delete m_ptr; m_ptr = p; } }};int main() { AutoPtr<int > t(new int(1));}
1. auto_ptr重载了操作符&,*和->。不要被语法误导,记住pstr是一个对象,不是一个指针。只是它重载了这些操作符后, 使用上相指针一样.
2. 不要将auto_ptr对象作为STL容器的元素。C++标准明确禁止这样做,否则可能会碰到不可预见的结果
3. 不要将数组作为auto_ptr的参数, 可以理解到在auto_ptr中, 使用delete, 但没有使用delete [].
4. auto_ptr不能作为容器的成员。
5. 不能通过赋值操作来初始化auto_ptr
std::auto_ptr<int> p(new int(42)); // OK
std::auto_ptr<int> p = new int(42); // ERROR
这是因为auto_ptr 的构造函数被定义为了explicit
- auto_ptr的简单实现
- auto_ptr的简单实现
- 智能指针auto_ptr的简单实现
- 【C++】智能指针auto_ptr的简单实现
- 简单实现auto_ptr,shared_ptr,weak_ptr
- 异常安全的auto_ptr类的简单实现
- auto_ptr 的一个实现
- auto_ptr的一个简单例子
- 应用auto_ptr, singleton的实现
- 由auto_ptr的实现说起。
- auto_ptr的实现与剖析
- C++标准库中简单智能指针auto_ptr的模仿实现源码
- auto_ptr实现
- auto_ptr实现
- c++智能指针auto_ptr的实现
- 基于auto_ptr源码的智能指针实现
- auto_ptr基本用法和实现的整理
- 实现auto_ptr的两种方法
- vb6文本框获得焦点问题
- 代码大全2(读书笔记5)
- 有没有人会Hibernate多对一啊,帮忙看下我配的对不对
- PHP AES256加密算法
- 观察者模式的理解(感觉还好,有时间看下 Button的监听过程)
- auto_ptr的简单实现
- ftp命令详解
- 解决Django网站的点击次数统计功能
- 获取网上邻居及其资源
- RQNOJ 598(用b记录元素是否在队中)
- 一个有关Java中List的低级错误
- 计算机知识
- i2c - gpio
- 【Poco】Poco::Format的例子