其中最可能的原因Data* arr = new Data[len];
是行不通的,因为类型Data
没有默认构造函数,即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]
来初始化指向其第一个元素的指针,并以与您使用动态分配数组相同的方式使用它。
它如何“不起作用”? – juanchopanza 2013-02-18 00:47:01
我怀疑你的类没有默认的构造函数?哦,至于散列图,如果你可以使用C++ 11,可以使用std :: unordered_map。 – Corbin 2013-02-18 00:47:19
有没有理由不能使用STL? – Aesthete 2013-02-18 00:47:46