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

猜你喜欢

转载自blog.csdn.net/CHEN_JYXHM/article/details/83003288