2012-10-08 49 views
1
class A { 
    public: 
    int i; 
}; 

int main() { 
    A *obj = new A(); 
    return 0; 
} 

在下面的代码,当被创建在堆中创建用于A中的对象的属性,但如果是我的在OBJ产生的存储器?? 它是在堆或栈上创建的还是存在不同的行为?存储器分配在C++

+1

该语法在C++中无效。它甚至不会编译。 –

+1

我想你的意思是'A * obj = new A();'。 – 0x499602D2

+0

指出修正 – user1198065

回答

5

作为-是,你的代码将无法编译 - new返回一个指针,而你试图赋值给一个对象,而不是一个指针

假设(也许更习惯于到Java?)你解决这个问题:

A *obj = new A(); 

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

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