首页 >后端开发 >C++ >如何覆盖 C 中的全局'new”和'delete”运算符?

如何覆盖 C 中的全局'new”和'delete”运算符?

Barbara Streisand
Barbara Streisand原创
2024-10-30 03:12:03937浏览

How Can I Override the Global `new` and `delete` Operators in C  ?

重写全局运算符:替换 new 和 delete

在复杂的代码库中,确保自定义 new 和 delete 运算符的一致使用可能具有挑战性。一个问题是外部库和 STL 使用可能会绕过自定义内存管理。

可以实现全局替换,而不是在多个文件中包含重载。链接定义这些运算符的单独翻译单元 (TU)。该TU提供以下功能:

<code class="cpp">void * operator new(std::size_t n) throw(std::bad_alloc);
void operator delete(void * p) throw();</code>

包括或类似的标头可能需要解析标准库名称。在 C 11 及更高版本中,decltype(sizeof(0)) 可以替换 std::size_t 并且可以省略动态异常规范。

<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false);</code>

通过链接此 TU,自定义 new 和 delete 运算符在整个过程中都处于活动状态该程序,确保一致的使用和改进的诊断能力。

以上是如何覆盖 C 中的全局'new”和'delete”运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn