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

C++(new与delete操作符)

C++中的new与delete

  • new 与 delete
  • 定位new表达式

new 与 delete

在C++中需要动态申请内存空间时需要使用 new 与 delete 这两个操作符

#include <iostream>
using namespace std;
int main()
{int* p1 = new int;//开辟一块int类型大小的空间给p1int* p2 = new int(1);//开辟一块int类型大小的空间给p2并且初始化为1int* p3 = new int[10];//开辟一块10个int类型大小的空间给p3int* p4 = new int[10] {1, 2, 3, 4};//开辟一块10个int类型大小的空间给p4并且将前四个初始化delete p1;delete p2;delete[] p3;delete[] p4;return 0;
}

这里需要明确,在C++中,new 的最底层实际调用的也是malloc,但除此之外还会调用被new类型的构造函数,delete 的最底层则是free,但除此之外还会调用被delete类型的析构函数

#include <iostream>
using namespace std;
class A
{
public:A(int x = 0){cout << "调用构造函数A()" << endl;}~A(){cout << "调用析构函数~A()" << endl;}
private://.......
};int main()
{A* p1 = new A;A* p2 = new A(1);A* p3 = new A[3];A* p4 = new A[3]{ 1,2,3 };delete p1;delete p2;delete[] p3;delete[] p4;return 0;
}

输出结果如下:
在这里插入图片描述
由此可见,new和delete在使用时会调用对应的构造和析构函数
注意 new delete 与 new[] delete[] 不要进行错配使用!否则程序可能崩溃!

定位new表达式

在C++中,new底层其实就是 operator new + 构造函数 ,同理 delete 也是 operator delete + 析构函数 ,所以我们可以将其拆开这样动态申请空间:

#include <iostream>
using namespace std;
class A
{
public:A(int x = 0){cout << "调用构造函数A()" << endl;}~A(){cout << "调用析构函数~A()" << endl;}
private://.......
};```
int main()
{A* p = (A*)operator new(sizeof(A));//声明空间new(p)A();//调用构造函数进行初始化p->~A();//调用析构函数释放空间operator delete(p);//delete释放动态申请的空间return 0;
}
http://www.lryc.cn/news/402326.html

相关文章:

  • STM32智能工业自动化监控系统教程
  • WPF设置欢迎屏幕,程序启动过度动画
  • Flink实时开发添加水印的案例分析
  • 收银系统源码-线上商城diy装修
  • Linux中nohup(no hang up)不挂起,用于在系统后台不挂断地运行命令,即使退出终端也不会影响程序的运行。
  • 【.NET全栈】ASP.NET开发Web应用——站点导航技术
  • docker 容器内部UI映射host
  • 数仓面试题——DWS层新增维度字段需求
  • Qt实现MDI应用程序
  • 逆向案例二十六——webpack自执行函数是完整的,但我们只需要加载器,某职业技术学校登陆密码逆向
  • 容器安全最佳实践和工具
  • 牛客周赛 Round 51
  • 【Linux】详解加锁实现线程互斥
  • Java学习高级四
  • mmc-utils 的 MMC 测试工具
  • 使用Python Turtle绘制圣诞树和装饰
  • 非常好的新版网盘系统,是一款PHP网盘与外链分享程序,支持文件预览
  • 针对【module_or_function】的单元测试,全面覆盖可能的【edge_cases】
  • OTA测试!
  • [H最短路] lc2959. 关闭分部的可行集合数目(Floyd最短路+二进制枚举+模板题)
  • pyinstaller用法详解3
  • 养猫新手不会挑智能猫砂盆?2024最新挑选干货分享!
  • 上海理工大学24计算机考研考情分析!初复试分值比55:45,复试逆袭人数不算多!
  • Pandas库学习之DataFrame.drop()函数
  • WHAT - 介绍一个不太一样的 UI 组件库 shadcn/ui
  • python--实验 11 模块
  • Vue3+Vite+TS+Axios整合详细教程
  • 【深度学习入门篇 ⑨】循环神经网络实战
  • 宝塔安装RabbitMq教程
  • 韦东山嵌入式linux系列-驱动进化之路:设备树的引入及简明教程