/*运算符重载--智能指针*/
#include "stdafx.h"
#include <iostream.h>
class CPerson
{
private:
int m_nAge;
public:
void sayHello()
{
this->m_nAge = 10;
cout << "sayHello" << endl;
}
};
class PerPtr
{
public:
//构造时传入一个需要管理的指针
PerPtr( CPerson* pPer )
{
m_pPerson = pPer;
}
//关键技巧,重载->来访问对象指针的数据
CPerson* operator->()
{
return m_pPerson;
}
//自己析构时把指针也析构了
~PerPtr()
{
if ( m_pPerson )
{
delete m_pPerson;
m_pPerson = NULL;
}
}
private:
//被管理的对象指针
CPerson* m_pPerson;
};
//智能指针类好处
//堆对象的指针放入,智能指针对象的结构中
//智能指针对象在栈中创建
//用栈中对象的生命周期管理堆对象
int main(int argc, char* argv[])
{
//带参构造,一个需要管理的指针为参数
PerPtr per(new CPerson());
//等同与(per.operator->())->sayHello();
per->sayHello();
return 0;
}