以下是创建x个新对象还是只是为x个对象分配空间?

Vector3D* binArray = new Vector3D[size];


我需要为堆上的x个Vector3D对象建立一个具有空间的数组。但是,只有在调用“添加”函数时才能创建Vector3D对象-这将获取参数,在堆上构造对象并将其地址添加到Vector3D指针数组中。

最佳答案

这确实在堆上创建了Vector3D对象的数组。

每个向量都是通过调用Vector3D构造函数创建的。

在Vector3D的默认构造函数中放入一些调试打印语句,然后观察该构造函数被调用的次数与数组中具有矢量的次数相同。

例:

#include <iostream>
using namespace std;

class C {
public:
  C() { cout << "Hello default constructor here\n"; }
};

int main() {
  C* cs = new C[5];
}


输出为:

Hello default constructor here
Hello default constructor here
Hello default constructor here
Hello default constructor here
Hello default constructor here


如果您的类没有默认的构造函数,则无法一次性分配数组(感谢@Everyone的评论),因此在这种情况下,请考虑使用std::vectorstd::array并动态添加Vector3D对象- -甚至是“静态”!例:

#include <iostream>
#include <vector>
using namespace std;

class Vector3D {
  double i, j, k;
public:
  Vector3D(double i, double j, double k): i(i), j(j), k(k) {}
};

int main() {
  vector<Vector3D> v = {
    Vector3D(3, 4, 5),
    Vector3D(6, 8, 10),
    Vector3D(7, 24, 25)
  };
  v.push_back(Vector3D(1, 2, 3));
  cout << v.size() << '\n';
}


输出4。

您还可以使向量包含指向Vector3D对象的指针。

关于c++ - 在堆上分配指针数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47293301/

10-09 23:10