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

C++中的new与delete

目录

1.简介

2.底层


1.简介

new是升级版的malloc,它会先开空间再去调用构造函数。

delete是升级版的free,它会先调用析构函数再free掉空间。

class A
{
public:A(int a1=0, int b1=0){a = a1;b = b1;}private:int a;int b;
};int main()
{//new会先开空间再调用构造函数A* p1 = new A;A* p2 = new A(1, 1);//new多个对象并调用构造函数初始化A* p3 = new A[3];//隐式类型转换:先构造出临时对象再调用拷贝构造A* p4 = new A[3]{ {1,2},{2,3},{3,5} };//运用匿名对象初始化,先是构造匿名对象,再拷贝构造(编译器会优化成一次构造)A* p5 = new A[3]{ A(1,1),A(2,2),A(3,3) };//delete会先调用析构函数,再free掉空间delete p1;delete p2;delete [] p3;delete [] p4;delete [] p5;return 0;
}

2.底层

//模拟底层//先是开空间,这里和malloc没区别
A* p6 = (A*)operator new(sizeof(A));
//显式调用构造函数
new(p6)A(1, 2);//显式调用析构函数
p6->~A();
//释放空间
operator delete (p6);


http://www.mrgr.cn/news/28845.html

相关文章:

  • Python 获取PDF的各种页面信息(页数、页面尺寸、旋转角度、页面方向等)
  • vue2和vue3的区别详解
  • 基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • linux命令详解,ssh服务+远程拷贝
  • Sql server 备份还原方法
  • 立体工业相机提升工业自动化中的立体深度感知
  • 欧美游戏市场的差异
  • C#实现基于ADO.NET框架的DBHelper工具类
  • 使用helm chart在Kubernetes部署Minio-适用于生产环境的部署方案
  • 技术上,如何复现 o1?
  • Marketo默认文件夹作用
  • 复选按钮QCheckBox
  • FastAPI动态路由设计:使用APIRouter处理复杂回调函数
  • 使用Faiss进行K-Means聚类
  • 【Linux】Shell编程入门
  • 面试真题-TCP的三次握手
  • 鸿蒙开发笔记_电商严选02_登录页面跳转到我的页面、并传值
  • 【C++】——继承详解
  • GPU加速生物信息分析的尝试
  • react-native和原生android的交互
  • ThreadX源码:Cortex-A7的tx_thread_irq_nesting_end(嵌套中断结束动作).s汇编代码分析
  • 算法竞赛命题数据生成方法
  • 硬件工程师笔试面试学习汇总——器件篇目录
  • iOS 18 新功能:控制中心大變身!控制項目自由選配
  • 电路设计学习(一)
  • 【AcWing】前缀和与差分(一维 + 二维)