给定一个Foo类,它具有一些用于初始化值的默认构造函数:

class Foo {
private:
    uint32_t x;

public:
    constexpr Foo()
        : x { 3 }
    {}
    // ... and some other constructors
};

我需要分配这些Foo的数组。我不希望运行数组元素的默认构造函数,因为稍后我还是要显式初始化每个元素。像这样:
Foo foos[20000];

for (int i = 0; i < 20000; ++i) {
    foos[i] = init(i);
}

鉴于我们不允许将Foo的默认构造函数更改为未初始化的数组,有没有一种方法可以获取未初始化的Foo数组?

顺便说一下,这是在D中创建未初始化的数组的方式:
Foo[20000] foos = void;

...这与Rust相同:
let mut foos: [Foo; 20000] = unsafe { std::mem::uninitialized() };

最佳答案

如果使用C++11,则可以使用std::vectoremplace_back()

vector<Foo> foos;
for(int i = 0; i < 20000; ++i)
    foos.emplace_back( /* arguments here */);

07-28 03:07
查看更多