/*运算符重载--智能指针*/

#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;
}

posted on 2010-02-02 20:41  o无尘o  阅读(1075)  评论(0)    收藏  举报