以下是创建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::vector
或std::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/