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

use*_*065 1 c++ memory-management

class A {
  public:
    int i;
};

int main() {
  A *obj = new A();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*fin 5

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

假设你解决了这个问题:

A *obj = new A();
Run Code Online (Sandbox Code Playgroud)

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

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