c ++中对象属性的内存分配

时间:2012-10-08 16:29:03

标签: c++ memory-management

class A {
  public:
    int i;
};

int main() {
  A *obj = new A();
  return 0;
}

在下面的代码中,当创建A的对象时,它是在堆中创建的,但是在obj中创建的i的内存在哪里? 它是在堆或堆栈上创建还是存在不同的行为?

1 个答案:

答案 0 :(得分:5)

按原样,你的代码不会编译 - new返回一个指针,你试图将它分配给一个对象而不是指针(可能更习惯于Java?)

<击>

假设你解决了这个问题:

A *obj = new A();

<击>

obj指向的整个对象在堆上分配。这包括i的存储空间。 obj本身是一个指针,它被分配有auto存储(即通常在堆栈上)。

顺便说一句,无论如何你都想做到这一点是相当不寻常的。大多数情况下,您只需定义一个对象(例如A obj;),如果涉及任何堆分配,对象将对其进行管理(包括在对象超出范围时清理存储)。