【C++内存管理机制】学习笔记(1):基本构件之new/delete expression

122 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情

C++ memory primitives

在这里插入图片描述

分配 |释放|类属|可否重载

malloc()|free()|C函数|不可

new|delete|C++表达式(expressions)|不可

:operator new()|::operator delete()|C++函数|可

allocator::allocate()|allocator::deallocate()|C++标准库|可自由设并以之搭配任何容器

C++应用程序内存分配层次

在这里插入图片描述

new expression

老师讲解:Complex* pc = new Complex(1, 2)

在这里插入图片描述

需要理解,new 一个对象时,编译器的操作有哪些

  • 第一步:为这个对象分配内存
  • 第二步:调用构造函数,为这个对象进行构造

上图中有三步:

  • 第一步就是分配内存
  • 第二步就是声明这个所指这个内存的指针的类型应该为comolex
  • 第三步就是使用构造函数进行构造

笼统看其实就第一步和第三步,以上操作在编译器层面。


再观察operator new其实就是调用了malloc

在这里插入图片描述

这里代码没看懂

delete expression

在这里插入图片描述

delete时,理解为

  • 先调用析构函数
  • 再使用operator delete函数进行释放内存(本质就是调用free)

测试程序

验证Ctor/Dtor调用情况(Ctor:构造函数 ,Dtor:析构函数)

结论:

  • vc下可以实现类似A::A(3)这样的构造函数,gcc下则不行

在这里插入图片描述

最后

仅为个人笔记,欢迎您指出错误,感谢!