构造顺序和正常运行一样:c++学习-类中类成员变量的创建和释放顺序1-进程正常结束释放资源-CSDN博客
析构时只会静态存储区资源都会被正常释放,堆区资源不会被释放
cpp
#include <iostream>
#include <memory>
using namespace std;
class WorkerA {
public:
WorkerA() {
cout << "WorkerA created." << endl;
}
~WorkerA() {
cout << "WorkerA destroyed." << endl;
}
};
class WorkerB {
public:
WorkerB() {
cout << "WorkerB created." << endl;
}
~WorkerB() {
cout << "WorkerB destroyed." << endl;
}
};
class WorkerC {
public:
WorkerC() {
cout << "WorkerC created." << endl;
}
~WorkerC() {
cout << "WorkerC destroyed." << endl;
}
};
class WorkerD
{
public:
WorkerD() {
cout << "WorkerD created." << endl;
}
~WorkerD() {
cout << "WorkerD destroyed." << endl;
}
};
class WorkerE {
public:
WorkerE() {
cout << "WorkerE created." << endl;
}
~WorkerE() {
cout << "WorkerE destroyed." << endl;
}
};
class WorkerF {
public:
WorkerF() {
cout << "WorkerF created." << endl;
}
~WorkerF() {
cout << "WorkerF destroyed." << endl;
}
};
class WorkerG {
public:
WorkerG() {
cout << "WorkerG created." << endl;
}
~WorkerG() {
cout << "WorkerG destroyed." << endl;
}
};
class Base {
public:
Base() {
cout << "Base created." << endl;
}
virtual ~Base() {
cout << "Base destroyed." << endl;
}
};
class Factory : public Base{
public:
WorkerA workerA; // 成员变量,WorkerA对象
std::unique_ptr<WorkerB> workerB = make_unique<WorkerB>(); // 智能指针,指向WorkerB对象
WorkerC* workerC = new WorkerC(); // 成员变量,WorkerC对象
static WorkerD workerD; // 静态成员变量,WorkerD对象
WorkerF* workerF = new WorkerF(); // 成员变量,WorkerF对象
Factory() {
static WorkerE workerE; // 静态成员变量,WorkerE对象
cout << "Factory created." << endl;
}
static void createWorkerG() {
static WorkerG workerG; // 局部变量,WorkerG对象
cout << "WorkerG created in Factory." << endl;
}
~Factory() {
cout << "Factory destroyed." << endl;
delete workerC;
}
};
int main() {
Factory *factory = new Factory();
factory->createWorkerG(); // 创建WorkerG对象
//delete factory; // 删除Factory对象,触发析构函数
Factory::createWorkerG();
return 0;
}
WorkerD Factory::workerD = WorkerD(); // 静态成员变量的定义和初始化
