gpt4 book ai didi

c++ - Realloc 和 glocal new/delete 运算符覆盖

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:20 24 4
gpt4 key购买 nike

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

但是,问题是:如果我重写 newdelete 运算符来管理全局跟踪内存使用情况,那么在这种情况下它们将不会被调用有人调用旧的 C 函数(malloccallocreallocfree)。

如何实现? std::vector 替换 realloc 是否正确?

最佳答案

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

如果 vector 包含非平凡对象,

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

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

关于c++ - Realloc 和 glocal new/delete 运算符覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28940980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com