当前位置: 首页 > news >正文

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(); // 静态成员变量的定义和初始化

http://www.dtcms.com/a/271404.html

相关文章:

  • 19-C#静态方法与静态类
  • HashMap的get与put流程源码深度解析
  • EPS 转 SVG/PNG 转换器集合
  • 托卡马克装置的发电过程解析
  • C++面试冲刺笔记1:虚函数的基本工作原理
  • thinkphp使用redis抢单实例
  • 深入理解MyBatis的MapperBuilderAssistant:如何解析Mapper XML文件?
  • 自然语言处理中probe探测是什么意思。
  • 基于docker进行渗透测试环境的快速搭建(在ubantu中docker设置代理)
  • EF提高性能(查询禁用追踪)(关闭延迟加载)
  • Java+AI精准广告革命:实时推送系统实战指南
  • 人工智能学习81-Yolo预测类
  • JavaEE-初阶-多线程初阶
  • JSP基础
  • day10-Redis面试篇
  • uniapp中使用uView-plus踩坑记录
  • 实变函数 第五章 勒贝格积分(三)
  • HNU 操作系统 Smile_Laughter的学习心得
  • 【RK3568+PG2L50H开发板实验例程】FPGA部分 | 以太网传输实验例程
  • 【PTA数据结构 | C语言版】大整数相乘运算
  • MySQL--DQLDCL
  • uniapp如何创建并使用组件?组件通过Props如何进行数据传递?
  • 七牛云C++开发面试题及参考答案
  • Synology Cloud Sync构建的企业级跨域数据中台
  • OpenGL 生成深度图与点云
  • Spring Boot多数据源配置详解
  • 【AI】环境——深度学习cuda+pytorch配置
  • aichat-core简化 LLM 与 MCP 集成的前端核心库(TypeScript)
  • 前端开发流程设计详解
  • 【leetcode】2235. 两整数相加