【问题标题】:How does new operator knows how much size needs to be allocated for specific classnew 运算符如何知道需要为特定类分配多少大小
【发布时间】:2016-12-09 12:54:01
【问题描述】:

在 malloc 函数用于内存分配的情况下,我们指定我们想要分配的大小

void *malloc(8);

但如果是新的,我们不会像下面这样指定尺寸

Foo *fo = new Foo();

所以,我的问题是 new 运算符函数如何知道它需要为对象分配的大小。请解释一下,幕后发生了什么?

【问题讨论】:

    标签: c++ new-operator


    【解决方案1】:

    编译器已经看到Foo的定义,所以它知道需要多少内存。 new Foo 实质上变成了两个操作:operator new(sizeof Foo) 分配内存,然后在新分配的空间中构造 Foo 对象。

    【讨论】:

    • 嗨皮特,你能为上述详细答案提供一些参考吗?因为,我想了解更多关于它的信息,并且我对上面提到的东西的细节很感兴趣。所以,请给我一个链接或书名表格,让我可以了解更多关于 c++ 的信息。
    【解决方案2】:

    与malloc 完全相同。 operator new 接受一个指定要分配的字节数的参数。

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

    您不需要手动指定大小,因为编译器会在使用new 时自动传递类型的大小。为此,类型必须是完整类型(您不能将 new 与不完整类型一起使用)。

    【讨论】:

    • 这里要小心:作为一种语言结构的“new operator”和作为库函数的“operator new”是有区别的。在new Foo 中,new 是 new 运算符,而不是 operator new。使用“operator new”,您确实必须手动指定尺寸;使用 new 运算符,编译器会计算出来,并使用适当的值调用 operator new。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2015-03-15
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多