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

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

相关文章:

  • 2022-12-23
  • 2022-01-19
  • 2022-02-18
  • 2022-12-23
  • 2021-12-19
  • 2022-01-09
  • 2021-09-28
  • 2021-11-17
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-24
  • 2021-05-31
  • 2021-09-24
  • 2022-12-23
  • 2022-01-16
相关资源
相似解决方案