gpt4 book ai didi

c++ - 'new operator' 和 'operator new' 之间的区别?

转载 作者:IT老高 更新时间:2023-10-28 11:51:05 30 4
gpt4 key购买 nike

“new operator”和“operator new”有什么区别?

最佳答案

我通常会尝试用不同的措辞来更好地区分两者,但无论如何这是一个好问题。

Operator new 是一个分配原始内存的函数——至少在概念上,它与 malloc() 没有太大区别。尽管除非您编写自己的容器之类的东西,否则这是相当不寻常的,但您可以直接调用 operator new,例如:

char *x = static_cast<char *>(operator new(100));

也可以全局或为特定类重载 operator new。 IIRC,签名是:

void *operator new(size_t);

当然,如果你重载了一个新的操作符(无论是全局的还是一个类的),你也需要/需要重载匹配的操作符 delete。值得一提的是,还有一个单独的运算符 new[] 用于为数组分配内存——但几乎可以肯定,完全忽略整个困惑会更好。

new 操作符是您通常用来从免费存储中创建对象的操作:

my_class *x = new my_class(0);

两者的区别在于 operator new just 只分配原始内存,仅此而已。 new 运算符首先使用 operator new 分配内存,但随后它为正确类型的对象调用构造函数,因此结果是在该内存中创建的真实事件对象。如果该对象包含任何其他对象(嵌入或作为基类),那么这些构造函数也会被调用。

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

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