开启掘金成长之旅!这是我参与「掘金日新计划 · 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下则不行
最后
仅为个人笔记,欢迎您指出错误,感谢!