2017-07-30 89 views
-1

如果我在堆上分配一个新的对象,是否所有变量都定义在对象的类中也堆在堆上?C++堆对象有堆栈或堆成员?

例如,假设我有一个名为_pos的数组中有一个x,y,z坐标的Node类。对于用户创建多个Node对象的缘故,节点声明堆上为:

Node n = new Node(0, 0, 0); 

我应该也宣布在堆上的位置数组:

class Node { 
public: 
    Node(double x, double y, double z) { 
    _pos = new double[3] {x, y, z}; 
    } 

private: 
    double* _pos; 
} 

或者是_pos阵列已经考虑在堆上及以下工程,以及

class Node { 
public: 
    Node(double x, double y, double z) { 
    _pos = double[3] {x, y, z}; 
    } 

private: 
    double* _pos; 
} 

我猜第二个也被认为是在堆上,在这种情况下,它也使释放更容易一点,但我希望小号omeone可以确认。

+0

“我还应该在堆上声明位置数组吗?”不,这不是必需的。 (为什么会这样?) – DimChtz

+0

两种替代方法都完全不同。这里没有“正确”或“错误”,这取决于。只有你知道正确的答案是什么,因为只有你知道应用程序的其余部分如何使用这些对象。要确定正确的答案,您需要查看C++书籍中关于对象,自动范围和动态范围的解释。 –

回答

0

如果我在堆上分配一个新的对象,所有的变量都定义在堆上的对象的类中吗?

是的。