以下是创建x个新对象,还是只为x对象分配空间?:
{
part: 1,
data: [arrayBuffer]
}
我需要为堆上的x Vector3D对象构建一个带空格的数组。但是,只有在"添加"时才能创建Vector3D对象。函数被调用 - 这将获取参数,在堆上构造对象并将其地址添加到Vector3D指针数组。
答案 0 :(得分:4)
这会在堆上创建一个Vector3D对象数组。
通过调用Vector3D构造函数创建每个向量。
在Vector3D的默认构造函数中放置一个小的调试print语句,并观察构造函数的调用次数与数组中的向量相同。
示例:
#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对象 - 甚至&#34;静态&#34;!例如:
#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对象的指针。
答案 1 :(得分:0)
根据提问者对RayToal优秀答案的评论添加。如果您在运行时之前不知道binArray
的大小,则必须使用std::vector
。如果您想单独分配每个项目,我建议您使用std::vector<Vector3D*>
。
通过这种方式,您可以在运行时调整std::vector
的大小,当您执行此操作时,它将保留一堆未分配的nullptr
。然后你可以分别分配它们中的每一个。
std::vector<Vector3D*> binArray;
binArray.resize(x); // now you have binArray of size x and no allocated elements
binArray[0] = new Vector3D(...);
请记住,在您不使用它们之后需要删除它们以避免内存泄漏:
for(size_t i=0;i<binArray.size(); i++)
if(binArray[i]!=nullptr) delete binArray[i];