class A {
public:
int i;
};
int main() {
A *obj = new A();
return 0;
}
在下面的代码中,当创建A的对象时,它是在堆中创建的,但是在obj中创建的i的内存在哪里? 它是在堆或堆栈上创建还是存在不同的行为?
答案 0 :(得分:5)
按原样,你的代码不会编译 - new
返回一个指针,你试图将它分配给一个对象而不是指针(可能更习惯于Java?) 击>
假设你解决了这个问题:
A *obj = new A();
击> <击> 撞击>
obj
指向的整个对象在堆上分配。这包括i
的存储空间。 obj
本身是一个指针,它被分配有auto
存储(即通常在堆栈上)。
顺便说一句,无论如何你都想做到这一点是相当不寻常的。大多数情况下,您只需定义一个对象(例如A obj;
),如果涉及任何堆分配,对象将对其进行管理(包括在对象超出范围时清理存储)。