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

十三、动态对象创建(Dynamic Object Creation)

十三、动态对象创建(Dynamic Object Creation)

目录

  • 13.1 对象创建(Object creation)
  • 13.2 new / delete 操作符
  • 13.3 数组的 newdelete
  • 13.4 总结

背景说明

  • 有时候我们需要知道程序中对象的数量、类型和声明周期,但并不总是如此

  • 为了应对一般编程问题,必须能够在运行时创建和销毁对象。

  • 存储区域可以粗略分为三部分

    • 静态存储区域

    • 动态内存分配(堆,heap)

  • 这里要讲到的动态内存分配就是使用newdelete

13.1 动态对象创建

创建一个C++对象时,会发生两个事件:

  • 为该对象分配存储空间
    • 静态存储区
    • 堆(动态内存分配)
  • 调用构造函数来初始化这块存储区域

13.2 操作符 new / delete

语法格式

new type(initializer); //创建一个动态的对象
delete pointername;//销毁一个动态对象

new type 没有 initializer,意味着参数为默认参数或者无参数。

示例1

MyType* p =  new MyType(1,2);
MyType* fp = new MyType;
delete p;
delete fp;

示例2

#include <iostream>
using namespace std;
class Tree{int height;
public:Tree(int treeHeight = 0):height(treeHeight){}void print(){cout << height << endl;}
};
void main(){Tree* t = new Tree(40);t->print();delete t;
}

输出

40

13.3 new / delete 数组

语法格式

new type[size];
delete []pointername;

示例1

MyTree *fp = new MyTree[100];
delete []fp;

示例2

#include <iostream>
using namespace std;
class Tree {int height;
public:Tree(int treeHeight = 0) :height(treeHeight) { cout << "Constructor:" << height << endl; }void print() { cout << height << endl; }
};void main()
{Tree* t = new Tree[3];t[2] = Tree(40);t[2].print();delete[]t;
}
  • new / new[] 返回一个指向指定类型的指针。
  • new 创建的对象必须通过 delete 来销毁。
  • 指针只能被 deletedelete [] 销毁一次

13.4 总结

  • 使用new / delete 创建和销毁一个对象
  • 使用new[] / delete [] 创建和销毁一个数组
http://www.xdnf.cn/news/411103.html

相关文章:

  • docker配置mysql主从同步
  • 无线定位之 三 SX1302 网关源码 thread_gps 线程详解
  • GF(2)域m次不可约及本原多项式的数量
  • Unity基础学习(十二)核心系统—物理系统之碰撞检测组件篇(1)刚体,碰撞体,材质
  • Tauri(2.5.1)+Leptos(0.7.8)开发桌面应用--程序启动界面
  • 深入掌握CSS Flex布局:从原理到实战
  • 数组作为指针计算大小时的误区
  • Android13 wifi设置关闭后断电重启会自动打开
  • JGEW-9液位流量压力温度实验装置
  • Genspark超级智能体调研
  • 从数据到洞察:解析结构化数据处理的智能跃迁
  • 苹果电脑笔记本macos Mac安装mixly 米思齐软件详细指南
  • 免费多线程下载工具
  • 电商物流的“速度与激情”:从城际运输到即时配送的全链路解析
  • 动态网站 LNMP
  • 每日Prompt:超现实交互场景
  • 全视通智慧病房无感巡视解决方案:科技赋能,重塑护理巡视新篇
  • 开关电源滤波器讲解
  • Cursor 配置 Browser MCP(基于浏览器底层协议控制)及浏览器插件安装
  • Blender 入门教程(一):模型创建
  • rust 全栈应用框架dioxus server
  • 大模型数据分析破局之路20250512
  • 架构、构架、结构、框架之间有什么区别?|系统设计|系统建模
  • 互联网大厂Java面试实战:Spring Boot到微服务的技术问答解析
  • Datawhale AI春训营 day
  • 基于ESP32的健康智能机器人
  • 23.(vue3.x+vite)引入组件并动态切换(component)
  • 嵌入式Linux I2C驱动开发详解
  • 火山RTC 6 自定义视频
  • BUUCTF——杂项渗透之look