Realloc 和全球本地新建/删除运算符覆盖
Realloc and glocal new/delete operator overriding
声明没有C++等效的C realloc
函数,我在另一个问题中发现这样的东西是由std::vector
自动管理的,我们应该使用它。我很好。我想,由于没有其他方法可以重新分配,std::vector
只会为我打电话realloc
。
但是,问题是:如果我覆盖用于管理全局跟踪内存使用情况的new
和delete
运算符,则在有人调用旧的 C 函数(malloc
、calloc
、realloc
、free
)的情况下,将不会调用它们。
怎么能做到呢?std::vector
取代realloc
是否正确?
std::vector
不会调用realloc
;它将使用其分配器来实现类似的事情:分配新内存,将对象移动到其中,然后解除分配旧内存。默认分配器使用 operator new
和 operator delete
,因此,如果您提供替换,将使用替换
如果向量包含非平凡的对象,realloc
是完全错误的做法;它复制原始数据,而C++对象通常必须通过调用其特殊函数来复制或移动。
C++库中的任何内容(除了 operator new
和 operator delete
的默认实现)都不会直接调用 C 分配函数。由于您不应该自己调用它们,因此只有在使用 C 库时才需要担心它们。
相关文章:
- 为什么 std::make_shared 无法编译带有已删除运算符 new 的类型?
- 无效删除运算符语法
- C++:如果我重载新运算符,我是否也必须重载删除运算符?
- C++自定义删除运算符不能正常工作?
- 为什么我们甚至需要删除运算符?(我们不能只使用删除[]吗)
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 在这里使用删除运算符是否正确,我很困惑
- 删除运算符
- 使用空实现重写删除运算符
- C ++(为什么)确实移动构造函数删除运算符=
- 如何在 C++ 中使用删除运算符删除单个数据
- 如何通过带有指向基类的指针的删除运算符释放内存
- 删除运算符如何在我的代码中工作
- C++ - 定义自定义新建和删除运算符时make_shared
- 将删除运算符放置在何处以进行动态变量
- C++删除运算符而不"new"
- 如何使用删除 [] 运算符清除动态分配的内存?(无法使用常规删除语法清除)
- 为什么删除运算符在const上下文中使用
- c++是否需要在用户定义和类特定的删除运算符中处理nullptr
- C++ 在覆盖新运算符和删除运算符时不释放数据