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

memory allocation of object attributes in c++

本文关键字:内存 分配 属性 对象 c++      更新时间:2023-10-16
class A {
public:
int i;
};
int main() {
A *obj = new A();
return 0;
}

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

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

假设你解决了这个问题:

A *obj = new A();

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

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