C++ auto_ptr 智能指针

C++ auto_ptr 智能指针

智能指针(只需要创建(new),不需要自己释放(delete)),依稀记得是在那本C++经典书籍中看到的,现在自己实现一遍,mutable这个关键字可以参考这里:http://dev.yesky.com/393/3007393.shtml实现代码如下:

/* FileName: main.cpp Author: ACb0y Create Time: 2011年2月4日 23:12:47 Last Modify Time: 2011年2月5日 00:45:58 */ #include <iostream> using namespace std; /* 智能指针类 */ template<class T> class SmartPtr { //构造函数,析构函数 private: //nothing protected: //nothing public: //构造函数 SmartPtr(T * pointer); //拷贝构造函数 SmartPtr(const SmartPtr<T> & rhs); //析构函数 ~SmartPtr(); //属性 private: //mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 //指向new出来对象的指针 mutable T * m_pointer; protected: //nothing public: //nothing //服务 private: //nothing protected: //nothing public: //重载运算符-> T * operator ->(); //重载运算符* T & operator *(); }; /* 函数名:SmartPtr(T * pointer) 功能:对m_pointer进行初始化 参数: 输入: pointer (T *):new出来的对象的指针 输出:无 返回值:无 */ template<class T> SmartPtr<T>::SmartPtr(T * pointer) { this->m_pointer = pointer; } /* 函数名:SmartPtr() 功能:析构函数 参数:无 返回:无 */ template<class T> SmartPtr<T>::~SmartPtr() { delete m_pointer; } /* 函数名:SmartPtr(const SmartPtr<T> & rhs) 功能:构造函数 参数: 输入: rhs (const SmartPtr<T> &): 要拷贝对象的引用 输出:无 返回: 无 */ template<class T> SmartPtr<T>::SmartPtr(const SmartPtr<T> & rhs) { this->m_pointer = rhs.m_pointer; rhs.m_pointer = 0; } /* 函数名:operator*() 功能:重载运算符* 参数:无 返回:T & */ template<class T> T & SmartPtr<T>::operator*() { return *m_pointer; } /* 函数名:operator->() 功能:重载运算符-> 参数:无 返回:T * */ template<class T> T * SmartPtr<T>::operator->() { return m_pointer; } /* 测试类 */ class Test { //构造函数,析构函数 private: //nothing protected: //nothing public: Test(); ~Test(); //属性 private: int m_data; protected: //nothing public: //nothing //服务 private: //nothing protected: //nothing public: //显示数据 void display(); }; Test::Test() { //do nothing } Test::~Test() { cout << "~Test() is called" << endl; } void Test::display() { this->m_data = 5; cout << "data = " << this->m_data << endl; } int main() { SmartPtr<Test> p(new Test); p->display(); (*p).display(); SmartPtr<int> d(new int); *d = 3; SmartPtr<Test> temp(p); return 0; }  


你可能感兴趣的:(C++,c,测试,delete)