有效覆盖全局新建和删除运算符
问题:
替换全局新建和删除运算符删除运算符使用自定义内存管理在大规模代码库中提出了挑战。在每个文件中包含包含重载的头文件是不切实际的。如何确保这些重载得到普遍采用?
解决方案:
重写 new 和 delete 运算符是在链接时完成的过程。通过创建一个单独的翻译单元 (TU) 来定义运算符并将其链接到项目中,可以全局替换默认运算符,而无需修改现有代码库。
代码示例:
以下是定义 new 和 delete 运算符的 TU 示例:
<code class="cpp">// optional_ops.cpp void * operator new(std::size_t n) throw(std::bad_alloc) { //... } void operator delete(void * p) throw() { //... }</code>
包括
C 11 及更高版本的替代方案:
C 11引入了一种更简单的方法来定义新的重载,使用 decltype(sizeof(0)) 来确定 size 参数的类型:
<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false) { //... }</code>
以上是如何在大型代码库中普遍覆盖全局“new”和“delete”运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!