说明没有C ++等效的C realloc
函数,我在另一个问题中发现这样的事情由std::vector
自动管理,我们应该使用它。
我很好。我想是的,因为没有其他方法可以重新分配,std::vector
只会为我调用realloc
。
然而,问题是:如果我要覆盖new
和delete
运营商来管理全局跟踪内存使用情况,那么在有人调用旧C函数的情况下不会调用它们( malloc
,calloc
,realloc
,free
)。
怎么做? std::vector
取代realloc
?
答案 0 :(得分:3)
std::vector
不会致电realloc
;它将使用其分配器来实现类似的功能:分配新内存,将对象移入其中,然后释放旧内存。默认分配器使用operator new
和operator delete
,因此如果您提供替换,则会使用替换。
realloc
将完全是错误的做法;它复制原始数据,而C ++对象通常必须通过调用它们的特殊函数来复制或移动。
C ++库中的任何内容(除了operator new
和operator delete
的默认实现之外)都不会直接调用C分配函数。由于您不应该自己调用它们,因此如果您使用的是C库,则只需要担心它们。