c++学习-类中类成员变量的创建和释放顺序2-资源new出来的对象未被手动delete

构造顺序和正常运行一样: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(); // 静态成员变量的定义和初始化