在malloc函数的情况下进行内存分配,我们指定我们想分配像怎样新的运营商知道多大尺寸需要如何分配给特定的类
void *malloc(8);
,但在新的情况下,我们不大小指定大小像下面
Foo *fo = new Foo();
所以,我的问题是如何做new操作符的功能知道它需要分配给对象的大小。请解释一下,幕后发生了什么?
在malloc函数的情况下进行内存分配,我们指定我们想分配像怎样新的运营商知道多大尺寸需要如何分配给特定的类
void *malloc(8);
,但在新的情况下,我们不大小指定大小像下面
Foo *fo = new Foo();
所以,我的问题是如何做new操作符的功能知道它需要分配给对象的大小。请解释一下,幕后发生了什么?
编译器已经看到Foo
的定义,所以它知道需要多少内存。 new Foo
基本上变成两个操作:operator new(sizeof Foo)
来分配存储器,接着在新分配的空间中构建Foo
对象。
与malloc
完全一样。 operator new
需要一个参数来指定要分配的字节数。
http://en.cppreference.com/w/cpp/memory/new/operator_new
您不必手动指定大小,使用时new
编译器会自动的类型的大小通过。要发生这种情况,类型必须是完整类型(不能使用new
和不完整类型)。
这里要小心:“新操作符”(这是一种语言结构)和“操作符新”(它是一个库函数)之间有区别。在'new Foo'中,'new'是新的操作符,而不是新的操作符。使用“operator new”,您可以**必须手动指定尺寸;使用新的操作符,编译器会计算出结果,并向操作员调用适当的值。 –
嗨皮特,你能否为上述详细的答案提供一些参考?因为,我想了解更多关于它的信息,而且我对上述内容的细节感兴趣。所以,请给我一个链接或书名表格,我可以在这里学习更多关于C++的知识。 – Swapnil