听完这场AI产品大会,我觉得如果不赚钱,所谓的提效真的毫无意义。
2025/12/21 17:34:23
reset函数显式更改类成员之间的析构顺序,以及类成员和类本身的析构顺序。参看 “测试代码 3”。#include<iostream>usingnamespacestd;classA{public:A(){cout<<"constructor A"<<endl;}~A(){cout<<"destructor A"<<endl;}};classB{public:B(){cout<<"constructor B"<<endl;}~B(){cout<<"destructor B"<<endl;}};classC{public:C(){cout<<"constructor C"<<endl;}~C(){cout<<"destructor C"<<endl;}private:A a;B b;};intmain(){C c;return0;}输出:
constructor A constructor B constructor C destructor C destructor B destructor A#include<iostream>#include<memory>#include<utility>usingnamespacestd;classA{public:A(){cout<<"constructor A"<<endl;}~A(){cout<<"destructor A"<<endl;}};classB{public:B(){cout<<"constructor B"<<endl;}~B(){cout<<"destructor B"<<endl;}};classC{public:C(){cout<<"constructor C"<<endl;b=std::make_unique<B>();a=std::make_unique<A>();}~C(){cout<<"destructor C"<<endl;}private:A a1;unique_ptr<A>a;unique_ptr<B>b;};intmain(){unique_ptr<C>c=std::make_unique<C>();return0;}输出:
constructor A constructor C constructor B constructor A destructor C destructor B destructor A destructor A#include<iostream>#include<memory>#include<utility>usingnamespacestd;classA{public:A(){cout<<"constructor A"<<endl;}~A(){cout<<"destructor A"<<endl;}};classB{public:B(){cout<<"constructor B"<<endl;}~B(){cout<<"destructor B"<<endl;}};classC{public:C(){cout<<"constructor C"<<endl;a=std::make_unique<A>();b=std::make_unique<B>();}~C(){cout<<"destructor C"<<endl;a.reset();b.reset();}private:unique_ptr<A>a;unique_ptr<B>b;};intmain(){unique_ptr<C>c=std::make_unique<C>();return0;}输出:
constructor C constructor A constructor B destructor C destructor A destructor B对象在创建时构造函数的调用顺序:
子类对象析构时的顺序(析构函数的调用顺序与构造函数相反):
2. 执行自身的析构函数;
3. 执行成员变量的析构函数;
4. 执行父类的析构函数。