代码之家  ›  专栏  ›  技术社区  ›  Swapnil

新操作符如何知道需要为特定类分配多少大小

  •  2
  • Swapnil  · 技术社区  · 8 年前

    对于用于内存分配的malloc函数,我们指定要分配的大小,如下所示:

    void *malloc(8);
    

    但如果是新的,我们不指定如下尺寸:

    Foo *fo = new Foo();
    

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

    2 回复  |  直到 8 年前
        1
  •  7
  •   Pete Becker    8 年前

    编译器已经看到了的定义 Foo new Foo 本质上,这转化为两个操作: operator new(sizeof Foo) 分配内存,然后构造 对象在新分配的空间中。

        2
  •  1
  •   Matti Virkkunen    8 年前

    malloc . operator new 接受指定要分配的字节数的参数。

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

    您不需要手动指定大小,因为使用时编译器将自动传入类型的大小 new .要实现这一点,类型必须是完整类型(您不能使用 具有不完整类型)。