学习new/delete操作符

本文详细解析了C++中的new/delete操作符的工作原理,包括如何分配内存、初始化对象以及释放内存的过程。同时介绍了placement new的用法及其与普通new操作符的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


最近在重新看Effective C++这本书,看到new和delete这部分。

(这里的new/delete用法对于写自己的自制STL中的空间配置器也有帮助,allocator就是将new和delete的工作分开完成的,分别是 1. 是先分配内存,再初始化对象,2. 先调用对象的析构函数,在释放掉内存)

在这里简单记录一下,方便以后查看。

new/delete/new[]/delete[] operator
operator new/delete/new[]/delete[]
placement new/new[]  // 注意,没有 placement delete/delete[]
使用方法如下代码:

Class *pc = new Class;
// ...
delete pc;
第一行代码是new操作符,第三行代码时delete操作符

编译器会将上述代码做些额外工作,如下:

void *p = operator new(sizeof(Class));
// 对p指向的内存调用Class的构造函数,此处无法用直观的代码展现
Class *pc = static_cast<Class*>(p);
// ...
pc->~Class();
operator delete(pc);
代码中第一行就是**operator new**,最后一行就是**operator delete**。总结一下,new操作符实际上做了两件事

1. 调用operator new 分配内存

2. 在分配好的内存上初始化对象,并返回该对象的指针。

与new操作符类似,delete操作符会先调用对象的析构函数,然后在调用operator delete释放内存。


相关连接:

参考了这篇博文:https://kelvinh.github.io/blog/2014/04/19/research-on-operator-new-and-delete/

wiki:https://zh.wikipedia.org/wiki/New_(C%2B%2B)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值