【问题标题】:Does new() allocate memory for the functions of a class also?new() 是否也为类的功能分配内存?
【发布时间】:2011-01-06 16:23:52
【问题描述】:
class Animal
{
public:
  int a;
  double d;
  int f(){ return 25;} 
};

假设对于上面的代码,我尝试初始化一个对象,通过说new Animal(),这new()是否也为函数f()分配内存?

换句话说,如果我有这个类并做了一个new Animal(),那么在内存分配方面有什么区别?

class Animal
{
public:
  int a;
  double d;
};

【问题讨论】:

    标签: c++ object memory-management new-operator


    【解决方案1】:

    对于没有虚函数的类,函数本身不占用数据空间。函数是可以执行以操作数据的代码段。必须分配的是数据成员。

    当你有一个虚拟类时,通常会有一个额外的虚拟表指针。请注意,vtable 是特定于实现的细节。尽管大多数编译器都使用它们,但您不能指望它始终存在。

    我已经 expanded 回答了你的其他问题。

    【讨论】:

      【解决方案2】:

      没有。文本页面中存在函数,因此没有为它们分配空间。

      【讨论】:

      • 那么,如果我的函数是一个虚函数(我的类是抽象的),new() 在堆上分配空间会有什么问题吗?
      • 所有一个虚函数的意思是该函数被添加到位于静态内存中的vtable中。每个使用虚函数的类只有一个 vtable 副本。
      • @Ignacio 我正在寻找答案:stackoverflow.com/questions/2091426/… 我认为问题与内存分配有关,但我无法弄清楚。
      • @cambr:与其问一堆认为有助于回答的问题,不如给我们一些代码和你真正的问题。
      • @cambr - 无法实例化抽象类的问题与内存分配无关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      相关资源
      最近更新 更多