我正在尝试将内存静态分配给指向名为“ mini”的结构的指针数组。 “ mini”结构用作存储索引和数据的一种方式,因此我可以通过对指向该结构的指针进行排序来进行间接排序。当我声明数组时,为数组分配了用于存储指针的内存,但是指针本身并未为“ mini”结构分配任何内存。静态分配很重要,因为它是排序算法的一部分,因此,我在尝试避免动态分配内存。
这是mini的声明和一个指向mini的指针的数组:
typedef struct {
long long index;
string data;
} mini;
static mini* ssn[1010000];
我可以动态分配如下:
for (int j = 0; j < 1010000; j++){
ssn[j] = new mini();
}
当我尝试为每个指针静态分配内存时,就会出现问题。这是我尝试过的一些事情:
static mini* ssn[1010000] = {{0,""}};
static mini* ssn[1010000] = {{new mini()}};
这些都不成功编译。 有什么方法可以为数组中的每个指针静态分配内存吗?
答案 0 :(得分:0)
您有一个指针数组,并且想要使用其他值(分配结果)初始化该数组(每个指针元素)。除了为每个元素提供值之外,无法对声明进行此类初始化:
static mini* ssn[4] = {new mini(), new mini(), new mini()};
每个您尚未提供值的元素都将使用默认值0
进行初始化。
如果需要定长数组,最好使用std::array
。 C ++具有强大的类型系统,请使用它。在这种情况下,初始化可以通用化:
struct Mini {
int x;
};
template <class Ar, class F, size_t... I>
static auto init(F factory, std::index_sequence<I...>) noexcept {
return Ar{factory(I)...};
}
using Array = std::array<Mini*, 20>;
static Array ssr(init<Array>([](...) { return new Mini(); }, std::make_index_sequence<20>()));
实际上是相同的:
static Array ssr(Array{new Mini(), new Mini(), ...})
编译器将优化Array
副本。请注意,此解决方案需要c ++ 14,尽管它可以适应c ++ 11。