2016-12-09 9 views

回答

7

编译器已经看到Foo的定义,所以它知道需要多少内存。 new Foo基本上变成两个操作:operator new(sizeof Foo)来分配存储器,接着在新分配的空间中构建Foo对象。

+0

嗨皮特,你能否为上述详细的答案提供一些参考?因为,我想了解更多关于它的信息,而且我对上述内容的细节感兴趣。所以,请给我一个链接或书名表格,我可以在这里学习更多关于C++的知识。 – Swapnil

1

malloc完全一样。 operator new需要一个参数来指定要分配的字节数。

http://en.cppreference.com/w/cpp/memory/new/operator_new

您不必手动指定大小,使用时new编译器会自动的类型的大小通过。要发生这种情况,类型必须是完整类型(不能使用new和不完整类型)。

+0

这里要小心:“新操作符”(这是一种语言结构)和“操作符新”(它是一个库函数)之间有区别。在'new Foo'中,'new'是新的操作符,而不是新的操作符。使用“operator new”,您可以**必须手动指定尺寸;使用新的操作符,编译器会计算出结果,并向操作员调用适当的值。 –