暂且不考虑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 对象却被销毁