Realloc 和 glocal new/delete 运算符覆盖

Realloc and glocal new/delete operator overriding

声明没有与 C realloc 函数等效的 C++,我在另一个问题中发现这种东西由 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 库,则只需要担心它们。