浅剖智能指针----auto_ptr
来源:互联网 发布:沙盘sandboxie软件 编辑:程序博客网 时间:2024/06/14 12:31
刚刚在复习的时候遇到了智能指针,就一时兴起去找出了智能指针的源码看了看,现将我对auto_ptr的理解记录如下:
Linux下,auto_ptr源码在/usr/include/c++/4.4.7/backword/auto_ptr.h
auto_ptr本身是一个模板类,封装了一个原生指针。它最大的特点是在拷贝构造、赋值、传参等过程中对原生指针控制权的转移,即会将自己所管理的指针release掉,并赋给新的auto_ptr对象。
代码如下:
#ifndef _BACKWARD_AUTO_PTR_H#define _BACKWARD_AUTO_PTR_H 1#include <bits/c++config.h>#include <debug/debug.h>_GLIBCXX_BEGIN_NAMESPACE(std) template<typename _Tp1> struct auto_ptr_ref { _Tp1* _M_ptr; explicit auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { } } _GLIBCXX_DEPRECATED_ATTR; template<typename _Tp> class auto_ptr { private: _Tp* _M_ptr; public: typedef _Tp element_type; explicit auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } template<typename _Tp1> auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } auto_ptr& operator=(auto_ptr& __a) throw() { reset(__a.release()); return *this; } template<typename _Tp1> auto_ptr& operator=(auto_ptr<_Tp1>& __a) throw() { reset(__a.release()); return *this; } ~auto_ptr() { delete _M_ptr; } element_type& operator*() const throw() { _GLIBCXX_DEBUG_ASSERT(_M_ptr != 0); return *_M_ptr; } element_type* operator->() const throw() { _GLIBCXX_DEBUG_ASSERT(_M_ptr != 0); return _M_ptr; } element_type* get() const throw() { return _M_ptr; } element_type* release() throw() { element_type* __tmp = _M_ptr; _M_ptr = 0; return __tmp; } void reset(element_type* __p = 0) throw() { if (__p != _M_ptr) { delete _M_ptr; _M_ptr = __p; } } auto_ptr(auto_ptr_ref<element_type> __ref) throw() : _M_ptr(__ref._M_ptr) { } auto_ptr& operator=(auto_ptr_ref<element_type> __ref) throw() { if (__ref._M_ptr != this->get()) { delete _M_ptr; _M_ptr = __ref._M_ptr; } return *this; } template<typename _Tp1> operator auto_ptr_ref<_Tp1>() throw() { return auto_ptr_ref<_Tp1>(this->release()); } template<typename _Tp1> operator auto_ptr<_Tp1>() throw() { return auto_ptr<_Tp1>(this->release()); } } _GLIBCXX_DEPRECATED_ATTR; template<> class auto_ptr<void> { public: typedef void element_type; } _GLIBCXX_DEPRECATED_ATTR;_GLIBCXX_END_NAMESPACE#endif /* _BACKWARD_AUTO_PTR_H */
本文首发于www.sbrave.cn
【完】
0 0
- 浅剖智能指针----auto_ptr
- 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
- 关于Geoserver 环境搭建问题
- HDU1033——Edge(实实在在的水题)
- C语言班主任管家系统
- 普通常量_魔术常量_后期绑定/延迟绑定
- IndentationError: expected an indented block
- 浅剖智能指针----auto_ptr
- Unix常用命令
- 1265 四点共面(向量求解)
- ubutu 将svn上的文件同步到自己的文件夹下面
- CintaNotes笔记软件V3.1.1中文正式版
- UVa 1583 Dighter Generator(生成元)
- ubifs作rootfs
- 栈,队列 集合!
- OpenCV矩阵运算