C++中的placement new与placement delete解析
5星 · 超过95%的资源 需积分: 0 109 浏览量
更新于2024-07-27
收藏 1.61MB PDF 举报
"More Effective C++"
在C++中,`malloc()` 和 `free()` 的对应函数是 `operator new` 和 `operator delete`。与 `malloc()` 和 `free()` 不同,`operator new` 和 `operator delete` 可以被重载,允许接收不同数量和类型的参数。`operator new` 的基本签名是 `void * operator new(size_t)`,而 `operator delete` 的基本签名是 `void operator delete(void*)`。重载 `operator new` 可以添加额外的参数,例如 `void * operator new(size_t, void *whereToPutObject)`,这是一个放置(new placement)操作,允许指定对象在内存中的位置。放置(new placement)的概念在C++标准库中非常常见,尤其在 `<new>` 头文件中。
放置(new placement)不仅仅是针对 `void*` 参数,还可以是任何比基本 `size_t` 参数更多的版本。当讨论放置(new placement)时,C++程序员可能指的是接受额外参数的任何 `operator new` 或 `operator delete` 版本。如果在对象构造过程中发生异常,标准规定如果异常来自构造函数,`operator delete` 会被自动调用来释放由 `operator new` 分配的内存。但是,如果 `operator new` 被重载,那么需要确保对应的 `operator delete` 也被相应地重载,以便正确处理内存的释放。
这本书《More Effective C++》由Scott Meyers撰写,由侯捷翻译,包含了关于C++编程的深入实践建议,如指针与引用的区别、谨慎定义类型转换函数、理解`new`和`delete`的不同含义以及异常处理的最佳实践。书中涵盖基础议题、运算符、异常处理和效率提升等多个方面,帮助程序员写出更高效、更健壮的C++代码。每个条目(item)都详细阐述了一个特定的C++主题,并提供了实用的技巧和建议。例如,如何防止资源泄漏、如何有效地使用异常处理,以及如何通过优化避免不必要的性能损失等。
2010-04-12 上传
369 浏览量
2011-01-12 上传
2010-09-17 上传
2015-06-05 上传
106 浏览量
182 浏览量
2025-01-08 上传
zgwhjyzx
- 粉丝: 3
- 资源: 37
最新资源
- 叉车变矩器故障诊断及处理.rar
- BULLDOG-开源
- 草图设备:一些草图格式的设备
- libdaisy-rust:菊花板的硬件抽象层实现
- clangular:lan角
- 行业文档-设计装置-一种拒油抗静电纸质包装材料.zip
- ICLR-Workshop-Challenge-1-CGIAR-Computer-Vision-for-Crop-Disease:Zindi竞赛的入门代码-ICLR Workshop Challenge#1
- aklabeth:Akalabeth aka'Ultima 0'的翻拍-开源
- snglpg:Занимаясь“在浏览器中设计”
- OpenCore-0.6.2-09-09.zip
- 摩尔斯电码,实现将字符转为摩尔斯电码的主体功能,能将摩尔斯电码通过串口上位机进行显示
- matlab布朗运动代码-Zombie:用于团队项目的MATLAB僵尸启示仿真(2016)
- 纯css3圆形发光按钮动画特效
- mvntest
- 版本:效用调查,专家和UX使用者,请指责一个集体经济团体,请参阅一份通俗的经济通函,一份从业者的各种困难和疑难解答,请参见网站实际内容
- OpenCore-0.6.1-09-08正式版.zip