c++ - 创建一个具有默认构造函数的未初始化项目数组?

标签 c++ arrays initialization c++14 default-constructor

给定一个类 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 */);

关于c++ - 创建一个具有默认构造函数的未初始化项目数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29000519/

相关文章:

java - 从二维数组或矩阵中删除重复项

php - 在重新声明之前取消设置数组有什么好处吗?

c++ - 我的 try catch 零除法有问题吗?

c++ - 遍历列表时无法获取我的结构的属性

javascript - 使用 JavaScript 进行功能分配?

java - Arraylist 到整数数组,无法正常工作(java)!

objective-c - 覆盖父类(super class)的指定初始化程序

c++ - 初始化基本类型数组

函数内部的 C++ 指针创建和赋值

c++ - bind() 用于将成员函数用作 STL 比较函数