Effective C++ 读书笔记之Part8.Customizing new and delete

简介: 49. Understand the behavior of the new-handler. 总结: 第一,set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被调用。
49. Understand the behavior of the new-handler.
总结:
第一,set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被调用。
第二,Nothrow new是一个颇为局限的工具,因为它只适用于内存分配;后继的构造函数调用还是可能抛出异常。

50. Understand when it makes sense to replace new and delete.
替换编译器提供的operator new或operator delete的理由:
1)用来检测运用上的错误。
2)为了强化效能。
3)为了收集使用上的统计数据。
4)为了增加分配和归还的速度。
5)为了降低缺省内存管理器带来的空间额外开销。
6)为了弥补缺省分配器中的非最佳齐味(suboptimal alignment)。
7)为了将相关对象成簇集中。
8)为了获得非传统的行为。
总结:
有许多理由需要写个自定的new和delete,包括改善效能、对heap运行错误进行调试、收集heap使用信息。

51. Adhere to convention when writing new and delete.
总结:
第一,operator new应该内包含一个无穷循环,并在其中尝试分配内存,如果它无法满足内存需求,就该调用new-handler。它也应该有能力处理0 bytes申请。Class专属版本则还应该处理“比正确大小更大的(错误)申请”。
第二,operator delete应该在收到null指针时不做任何事。Class专属版本则还应该处理“比正确大小更大的(错误)申请”。

52.Write placement delete if you write placement new.
总结:
第一,当你写一个placement operator new,请确定也写出了对应的placement operator delete。如果没有这样做,你的程序可能会发生隐微而时断时续的内存泄露。
第二,当你声明placement new 和placement delete,请确定不要无意识(非故意)地掩盖了他们的正常版本。

批注:
本部分内容主要关注自己实现new和delete的时候需要注意的一些事项,这些功能在平时使用的不多。但是很有助于理解new和delete内部的结构。
目录
相关文章
|
2月前
|
存储 Java 编译器
C++:内存管理|new和delete
C++:内存管理|new和delete
|
2月前
|
存储 算法 编译器
【C++ 内存管理 重载new/delete 运算符 新特性】深入探索C++14 新的/删除的省略(new/delete elision)的原理与应用
【C++ 内存管理 重载new/delete 运算符 新特性】深入探索C++14 新的/删除的省略(new/delete elision)的原理与应用
56 0
|
2天前
|
存储 编译器 C++
【C++】内存管理和模板基础(new、delete、类及函数模板)
【C++】内存管理和模板基础(new、delete、类及函数模板)
14 1
|
6天前
|
安全 程序员 C++
C++ new和delete的用法
需要注意的是,使用 `new`和 `delete`分配和释放内存时,程序员负责管理内存的分配和释放,这可能导致内存泄漏或释放已释放内存的问题。因此,C++引入了智能指针(如 `std::shared_ptr`和 `std::unique_ptr`)以更安全和自动化地管理内存。
29 2
|
14天前
|
C语言 C++
【C++基础(九)】C++内存管理--new一个对象出来
【C++基础(九)】C++内存管理--new一个对象出来
|
2月前
|
存储 Linux C语言
【C++练级之路】【Lv.5】动态内存管理(都2023年了,不会有人还不知道new吧?)
【C++练级之路】【Lv.5】动态内存管理(都2023年了,不会有人还不知道new吧?)
|
2月前
|
算法 前端开发 大数据
【C/C++ 基础知识 】C++中易混淆的函数和关键字:std::find vs std::search,std::remove vs std::erase,remove vs delete
【C/C++ 基础知识 】C++中易混淆的函数和关键字:std::find vs std::search,std::remove vs std::erase,remove vs delete
36 0
|
2月前
|
安全 算法 编译器
C++中=delete的巧妙用法
C++中=delete的巧妙用法
53 0
|
2月前
|
存储 程序员 C++
C/C++ 内存分配 new 操作符:剖析new操作符的实现机制和使用技巧
C/C++ 内存分配 new 操作符:剖析new操作符的实现机制和使用技巧
26 0
|
2月前
|
存储 程序员 Shell
【C/C++ 内存管理函数】C语言动态内存管理大揭秘:malloc、calloc、realloc与new的对比与差异
【C/C++ 内存管理函数】C语言动态内存管理大揭秘:malloc、calloc、realloc与new的对比与差异
177 0