智能指针

auto_ptr得拷贝构造函数  和  赋值函数 进行的是对象所有权的转移  并不是简单的bitwise copy

可以避免多个指针指向同一块内存的问题

但是引出很多新问题

 

auto_ptr的问题

 

1.  auto_ptr不能以值传递的方式作为函数参数   因为所有权被转移了 实参指向空

     必须要使用const & 作为参数

 

2.  auto_ptr的拷贝构造函数 和 赋值函数 的参数都没有const

 

3.  auto_ptr对象不允许放入容器

 

 

一个auto_ptr实例

#pragma once template <class T> class auto_ptr { public: auto_ptr(T* pStr = NULL); // 拷贝构造函数 参数无const auto_ptr(auto_ptr<T>& param); virtual ~auto_ptr(); // 赋值函数 参数无const auto_ptr<T>& operator=(auto_ptr<T>& param); T& operator*(); T* operator->(); public: T* pValue; }; template <class T> auto_ptr<T>::auto_ptr(T* pStr) : pValue(pStr) { } template <class T> auto_ptr<T>::~auto_ptr() { delete pValue; } template <class T> auto_ptr<T>::auto_ptr(auto_ptr<T> ¶m) { // 指向传递 pValue = param.pValue; param.pValue = NULL; } template <class T> auto_ptr<T>& auto_ptr<T>::operator =(auto_ptr<T> ¶m) { if(this == ¶m) return *this; // 2 删除原来指向 delete pValue; // 3 指向传递 pValue = param.pValue; param.pValue = NULL; return *this; } template <class T> T& auto_ptr<T>::operator *() { return *pValue; } template <class T> T* auto_ptr<T>::operator ->() { return pValue; }

你可能感兴趣的:(null,delete,Class)