Realloc 和全球本地新建/删除运算符覆盖

Realloc and glocal new/delete operator overriding

本文关键字:删除 运算符 覆盖 新建 Realloc      更新时间:2023-10-16

声明没有C++等效的C realloc函数,我在另一个问题中发现这样的东西是由std::vector自动管理的,我们应该使用它。我很好。我想,由于没有其他方法可以重新分配,std::vector只会为我打电话realloc

但是,问题是:如果我覆盖用于管理全局跟踪内存使用情况的newdelete运算符,则在有人调用旧的 C 函数(malloccallocreallocfree)的情况下,将不会调用它们。

怎么能做到呢?std::vector取代realloc是否正确?

std::vector不会调用realloc;它将使用其分配器来实现类似的事情:分配新内存,将对象移动到其中,然后解除分配旧内存。默认分配器使用 operator newoperator delete ,因此,如果您提供替换,将使用替换

如果向量包含非平凡的对象,realloc是完全错误的做法;它复制原始数据,而C++对象通常必须通过调用其特殊函数来复制或移动。

C++库中的任何内容(除了 operator newoperator delete 的默认实现)都不会直接调用 C 分配函数。由于您不应该自己调用它们,因此只有在使用 C 库时才需要担心它们。