Data* arr = new Data[len];
不起作用的最可能原因之一是因为 typeData
没有默认构造函数,即Data::Data()
.
但是不管Data
有没有默认的构造函数,无论如何尝试创建这样的数组都不是一个好主意。一旦你动态地分配它,new[]
你就承诺自己负责处理丑陋的内存管理。最好使用 STL 容器之一,例如std::vector
(#include <vector>
必需的),它将为您处理内存管理。
然后你有几个选择:
std::vector<Data> v; // option 1
v.reserve(len);
// in loop:
v.push_back(Data(x, y)); // there could be different values
std::vector<Data> v2(len); // option 2
std::vector<Data> v3(len, Data(12,12)); // option 3
第一个选项几乎适合任何情况。它准备了足够大的内存块来保存len
元素,然后你可以v
方便地填充但仍然非常有效的方式。选项 2 需要Data
具有默认构造函数,这由选项 3 解决,该选项使用您的自定义构造函数来构造元素。
所有提到的选项都会导致std::vector
创建具有自动存储持续时间的对象。请注意,所有元素都存储在连续的内存块中,因此您可以使用&v[0]
它来初始化指向其第一个元素的指针,并以与使用动态分配数组相同的方式使用它。