[英]Dynamically allocating an array of objects fails
我能够创建一个动态大小的整数数组,如下所示:
int *cacheL2 = new int[L2/B2];
而且我还可以创建Data
类型的对象,如下所示:
Data one(12,12);
现在我想要一个动态调整大小的Data
数组:
Data * vlaObj = new Data[L2/B2];
但这不起作用...
另外,如果您能告诉我如何使散列适用于c ++,那将很棒。 我一直在寻找示例,但是所有内容都只说#include“ hash_map”,但是当我尝试使用该库时,似乎找不到任何示例。
#include <vector>
// ...
std::vector<Data> v;
v.emplace_back( 12, 12 );
这里没有理由不使用STL容器。 建议使用std::vector
而不是原始指针:
#include <vector>
//...
std::vector<Data> vlaObj(L2/B2);
vlaObj.push_back(one)
编辑:BTW是否有可能L2甚至B2值可以为0
?
Data* arr = new Data[len];
的最可能原因之一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]
初始化指向其第一个元素的指针,并以与动态分配数组相同的方式使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.