More Effective C++笔记
smart指针
smart指针创建
#include <iostream>
using namespace std;
template<class T>
class MyAuto_ptr
{
public:
MyAuto_ptr(T *ptr = 0) :_ptr(ptr) {}
~MyAuto_ptr() { delete _ptr; }
MyAuto_ptr(MyAuto_ptr<T>& rhs);
MyAuto_ptr<T>& operator=(MyAuto_ptr<T> &rhs);
T& operator*() const;
T* operator->() const;
private:
T *_ptr;
};
template<class T>
MyAuto_ptr<T>::MyAuto_ptr(MyAuto_ptr<T>& rhs)
{
//private针对与类来说的,不是对象
_ptr = rhs._ptr;
rhs._ptr = 0;
}
template<class T>
MyAuto_ptr<T>& MyAuto_ptr<T>::operator=(MyAuto_ptr<T> &rhs)
{
if (this == &rhs)
return *this;
delete _ptr;
_ptr = rhs._ptr;
rhs._ptr = 0;
return *this;
}
template<class T>
T& MyAuto_ptr<T>::operator*() const
{
//perform "smart pointer" processing
return *_ptr;
}
template<class T>
T* MyAuto_ptr<T>::operator->() const
{
//perform "smart pointer" processing
return _ptr;
}
int main()
{
MyAuto_ptr<int> m1;
MyAuto_ptr<int> m2(m1);
MyAuto_ptr<int> m3;
m3 = m2;
return 0;
}
注意事项