C++堆对象具有堆栈或堆成员?

C++ Heap Object has Stack or Heap Members?

本文关键字:成员 堆栈 对象 C++      更新时间:2023-10-16

如果我在堆上分配一个新对象,那么在对象的类中定义的所有变量是否也在堆上?

例如,假设我有一个 Node 类,该类在一个名为 _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;
}

我猜第二个也在堆上考虑,在这种情况下,它也使分配更容易一些,但我希望有人可以确认。

如果我在堆上分配一个新对象,那么在对象的类中定义的所有变量是否也在堆上?

是的。