一个智能指针的简单实现

暂且不考虑Qt的父子关系,只是阐述智能指针的思想。


一、认识智能指针

它是一个保存堆对象指针的类,可以确保在合理实机正确的销毁堆对象。

二、为啥要用智能指针

c++没有垃圾回收机制,动态分配的对象有时遗漏销毁操作,智能指针对象它是一个局部变量,生命周期结束会将管理的堆对象销毁。

三、一个简单的智能指针实现(不考虑模板)


//这个类要动态分配对象

class TestOperatorNum
{
public:
    TestOperatorNum();
 
    ~TestOperatorNum() {
        qDebug() << "destruct TestOperatorNum";
    }
 
    void printThisName() {
        qDebug() << "This is TestOperatorNum";
    }
};


//这是针对上边类的智能指针

class TestAutoPtr {
public:
   
    ///【1】构造智能指针对象的时候初始化被管理对象
    TestAutoPtr ::TestAutoPtr( TestOperatorNum *operatorNum)
    	: operatorNum(operatorNum) {
    }
    ///【3】智能指针对象生命周期结束时,被管理的堆对象将被销毁(delete)
   
   
~ TestAutoPtr () {
        delete operatorNum;      
        operatorNum = nullptr;
	   qDebug() << "disconstructor TestAutoPtr";

    }

 
    void printusingautoptr() {
        qDebug() << "using auto printer";
    }

 
    ///【2】重载 ->  这个重载是必须的这样才可以获得我们实际操作的对象
    TestOperatorNum *operator->() const {
        return operatorNum;
    }
 
private:
    TestOperatorNum *operatorNum; //被管理的那个堆对象指针
};

//在一个局部域内使用

void test() {
    TestAutoPtr myautoptr(new TestOperatorNum());
 
    myautoptr.printusingautoptr();
    myautoptr->printThisName();
}
 

//验证

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    test();
 
    return a.exec();
}

并没有手动去delete 对象却被销毁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值