1. 程式人生 > >5.自實現智慧指標

5.自實現智慧指標

//自自實現智慧指標 ,不需delete自動釋放堆記憶體。

#include <iostream>
using namespace std;

class A
{
public:
    A()
    {
        cout<<"A()"<<endl;
    }
    void xxxx()
    {
        cout<<"xxxx"<<endl;
    }

    ~A()
    {
        cout<<"~A()"<<endl;
    }

};

class SmartPtr
{
public:
    SmartPtr(A* pa)
    {
        _pa = pa;
    }
    ~SmartPtr()
    {
        delete _pa;
    }
//讓物件 像 指標一樣使用。
#if 1
    A* getAp() //-> 被 A* operator->() 代替
    {
        return _pa;
    }
#endif
#if 1
    A& getAref() //-> 被   A& operator*()代替
    {

        return *_pa;
    }
#endif

    A* operator->()
    {
        return _pa;
    }
    A& operator*() //->
    {

        return *_pa;
    }

private:
    A *_pa;
};

int main()
{
    SmartPtr sp(new A);

    sp.getAp()->xxxx();
    sp.getAref().xxxx();

    sp->xxxx();//sp.operator->() //這個有疑問,怎麼觸發->過載的
    (*sp).xxxx();//sp.operator*()

    return 0;
}