您的位置:首页 > 其它

类模版的使用----智能指针

2015-12-28 15:58 190 查看
<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: