我通常会尝试用不同的措辞来更好地区分两者,但无论如何,这是一个好问题。
Operator new 是一个分配原始内存的函数——至少在概念上,它与malloc()
。尽管这相当不寻常,除非您正在编写类似自己的容器的东西,但您可以直接调用operator new,例如:
char *x = static_cast<char *>(operator new(100));
还可以全局或针对特定类重载operator new。 IIRC,签名为:
void *operator new(size_t);
当然,如果您重载了 new 运算符(无论是全局的还是针对类的),您也希望/需要重载匹配的运算符 delete。就其价值而言,还有一个单独的运算符 new[] 用于为数组分配内存 - 但几乎可以肯定,您最好完全忽略整个混乱。
new 运算符通常用于从免费存储中创建对象:
my_class *x = new my_class(0);
两者的区别在于operator newjust分配原始内存,仅此而已。 new 运算符首先使用operator new 分配内存,但随后它调用正确类型的对象的构造函数,因此结果是在该内存中创建的真正的活动对象。如果该对象包含任何其他对象(嵌入式或作为基类),也会调用这些构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)