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的内存在哪里?它是在堆或堆栈上创建还是有不同的行为?
原样,你的代码不会编译 - new返回一个指针,你试图将它分配给一个对象而不是指针(可能更习惯于Java?)
假设你解决了这个问题:
A *obj = new A();
Run Code Online (Sandbox Code Playgroud)
obj指向的整个对象在堆上分配.这包括存储i.obj本身是一个指针,它分配有auto存储(即通常在堆栈上).
顺便说一下,无论如何你想要这样做是相当不寻常的.大多数情况下,您只需定义一个对象(例如A obj;),如果涉及任何堆分配,对象将对其进行管理(包括在对象超出范围时清理存储).
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |