1
class A {
public:
int i;
};
int main() {
A *obj = new A();
return 0;
}
在下面的代码,当被创建在堆中创建用于A中的对象的属性,但如果是我的在OBJ产生的存储器?? 它是在堆或栈上创建的还是存在不同的行为?存储器分配在C++
class A {
public:
int i;
};
int main() {
A *obj = new A();
return 0;
}
在下面的代码,当被创建在堆中创建用于A中的对象的属性,但如果是我的在OBJ产生的存储器?? 它是在堆或栈上创建的还是存在不同的行为?存储器分配在C++
作为-是,你的代码将无法编译 -
new
返回一个指针,而你试图赋值给一个对象,而不是一个指针
假设(也许更习惯于到Java?)你解决这个问题:
A *obj = new A();
是obj
点是在堆上分配整个对象。这包括i
的存储。 obj
本身是一个指针,它被分配为auto
存储(即,通常在堆栈上)。
顺便说一句,无论如何你都想要这样做是相当不寻常的。大多数情况下,您只需定义一个对象(例如A obj;
),并且如果涉及任何堆分配,对象将对其进行管理(包括在对象超出范围时清理存储)。
该语法在C++中无效。它甚至不会编译。 –
我想你的意思是'A * obj = new A();'。 – 0x499602D2
指出修正 – user1198065