下面是创建 x 个新对象,还是简单地为 x 个对象分配空间?:
Vector3D* binArray = new Vector3D[size];
我需要为堆上的 x Vector3D 对象构建一个具有空间的数组。但是,只有在调用“添加”函数时才能创建 Vector3D 对象 - 这将获取参数,在堆上构造对象并将其地址添加到 Vector3D 指针数组。
最佳答案
这确实在堆上创建了一个 Vector3D 对象数组。
每个 vector 都是通过调用 Vector3D 构造函数创建的。
在 Vector3D 的默认构造函数中放置一些调试打印语句,观察构造函数被调用的次数与数组中的 vector 相同。
例子:
#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。
您还可以使 vector 包含指向 Vector3D 对象的指针。
关于c++ - 在堆上分配指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47293301/