C++堆对象有堆栈或堆成员?
问题描述:
如果我在堆上分配一个新的对象,是否所有变量都定义在对象的类中也堆在堆上?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可以确认。
答
如果我在堆上分配一个新的对象,所有的变量都定义在堆上的对象的类中吗?
是的。
“我还应该在堆上声明位置数组吗?”不,这不是必需的。 (为什么会这样?) – DimChtz
两种替代方法都完全不同。这里没有“正确”或“错误”,这取决于。只有你知道正确的答案是什么,因为只有你知道应用程序的其余部分如何使用这些对象。要确定正确的答案,您需要查看C++书籍中关于对象,自动范围和动态范围的解释。 –