<span style="font-size:24px;">// SmartPointer.h
#ifndef _SMARTPOINTER_H_
#define _SMARTPOINTER_H_
template< typename T>
class SmartPointer
{
private:
public:
SmartPointer();
SmartPointer(T* pointer);
~SmartPointer();
T& operator*();
T* operator->();
protected:
T* m_pointer;
};
#endif</span>
<span style="font-size:24px;">//SmartPointer.hpp
#ifndef _SMARTPOINTER_DEF_H_
#define _SMARTPOINTER_DEF_H_
#include "SmartPointer.h"
template<typename T>
SmartPointer<T>::SmartPointer()
{
m_pointer = NULL;
}
template<typename T>
SmartPointer<T>::SmartPointer(T* pointer)
{
m_pointer = pointer;
}
template<typename T>
SmartPointer<T>::~SmartPointer()
{
delete m_pointer;
}
template<typename T>
T& SmartPointer<T>::operator*()
{
return *m_pointer;
}
template<typename T>
T* SmartPointer<T>::operator->()
{
return m_pointer;
}
#endif</span>
<span style="font-size:24px;">//智能指针的使用
//main.cpp
#include <iostream>
#include "SmartPointer.hpp"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
class Test
{
public:
int i;
void print()
{
cout << i << endl;
}
};
int main(int argc, char *argv[])
{
SmartPointer<int> pi = new int(5);
cout << *pi << endl;
*pi = 10;
cout << *pi << endl;
//---------------------------------------//
SmartPointer<Test> t = new Test();
t->i = 20;
t->print();
cout << t->i << endl;
return 0;
}</span>