我用自己的实现替换了operator new
。我想将我的operator new
用于程序中对new
的每个调用,但某些情况除外,例如std
容器。
是否可以使std
容器使用默认operator new
?例如,std::list
.
简短的回答是"否"。
当任何编译单元替换operator new()
时,它实际上被替换为程序中的所有编译单元。 这意味着operator new()
变体的所有用法或引用都将解析为替换。 标准容器中的默认分配器受到的影响与程序中的任何其他代码一样大。
替换operator new()
及其变体的方案是全有或全无的,即 您不会得到一些operator new()
解析为默认版本而其他解析为替换版本的用法。
您可以为容器提供一个分配器,该分配器使用某些方法获取原始内存,而不是替换operator new()
。