gpt4 book ai didi

c++ - operator new 和 operator new[] 的区别?

转载 作者:太空狗 更新时间:2023-10-29 21:30:41 24 4
gpt4 key购买 nike

我已经重载了全局运算符 new/delete/new[]/delete[] 但简单的测试表明,虽然我的 new 和 delete 版本被正确调用,但使用 new[] 和 delete 进行简单的数组分配和删除[] 调用 newaop.cpp 和 delete2.cpp 中的实现。

比如这段代码

int* a = new int[10];

在 newaop.cpp 中调用 operator new[],后者又调用我的 operator new 版本。所以看起来它们是全局重载的,但由于某种原因不是数组版本。有什么我想念的吗?

编辑:我对运算符的实现是在一个单独的项目中,该项目被编译到一个库中并静态链接到。回想起来,将其包含在原始帖子中可能很有用,因为它可能与此有关。虽然我仍然不明白为什么只有数组版本受到影响。

最佳答案

我不知道你是如何重载 operator new[] 但我只是用 MSVC2008 试了一下:

void* operator new[](size_t size)
{
return 0;
}

int main()
{
int* a = new int[5];
}

上面的代码有效地调用了我错误的 operator new[] 实现。

所以这是我的猜测:由于某种原因,你在重载 operator new[] 时失败了,你的程序使用了 operator new[] 的编译器版本,它依赖于 operator new 来分配内存。由于您重载了 operator new,因此会调用您的实现。

关于c++ - operator new 和 operator new[] 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2082099/

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