我能够创建一个动态大小的整数数组,如下所示:
int *cacheL2 = new int[L2/B2];
我也可以像这样创建Data
类型的对象:
Data one(12,12);
现在我想要一个动态大小的Data
数组:
Data * vlaObj = new Data[L2/B2];
但它不起作用......
另外,如果你能告诉我如何为c ++工作哈希会很棒。我一直在寻找示例,但是所有内容都只是说#include“hash_map”但是当我尝试使用它时,它似乎无法找到它们中的任何一个。
答案 0 :(得分:2)
#include <vector>
// ...
std::vector<Data> v;
v.emplace_back( 12, 12 );
答案 1 :(得分:1)
没有理由不在这里使用STL容器。建议使用std::vector
而不是原始指针:
#include <vector>
//...
std::vector<Data> vlaObj(L2/B2);
vlaObj.push_back(one)
编辑:BTW是否有可能L2或甚至B2值可能是0
?
答案 2 :(得分:0)
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]
初始化指向其第一个元素的指针,并以与使用动态分配的数组相同的方式使用它。