c++学习-类中类成员变量的创建和释放顺序2-资源new出来的对象未被手动delete
构造顺序和正常运行一样:c++学习-类中类成员变量的创建和释放顺序1-进程正常结束释放资源-CSDN博客
析构时只会静态存储区资源都会被正常释放,堆区资源不会被释放
#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(); // 静态成员变量的定义和初始化