Realloc和glocal new / delete运算符覆盖

时间:2015-03-09 11:32:37

标签: c++ c stdvector realloc

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

然而,问题是:如果我要覆盖newdelete运营商来管理全局跟踪内存使用情况,那么在有人调用旧C函数的情况下不会调用它们( malloccallocreallocfree)。

怎么做? std::vector取代realloc

是否正确?

1 个答案:

答案 0 :(得分:3)

std::vector不会致电realloc;它将使用其分配器来实现类似的功能:分配新内存,将对象移入其中,然后释放旧内存。默认分配器使用operator newoperator delete,因此如果您提供替换,则会使用替换。

如果向量包含非平凡对象,

realloc将完全是错误的做法;它复制原始数据,而C ++对象通常必须通过调用它们的特殊函数来复制或移动。

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