1
class A {
  public:
    int i;
};

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

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

4

1 回答 1

5

照原样,您的代码不会编译——new返回一个指针,并且您试图将它分配给一个对象而不是一个指针(也许更习惯于 Java?)

假设您解决了这个问题:

A *obj = new A();

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

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

于 2012-10-08T16:31:32.710 回答