当元素默认插入到 的实例中时std::vector<T>
,默认情况下它们会进行值初始化。我经常使用多线程高性能代码,在这种情况下,大型数组的这种值初始化可能代表不可接受的顺序瓶颈。
如果在并发代码中,基于reserve()
and push_back()
/的典型方法是没有用的。emplace_back()
我通常会选择以下选项之一:
- 定义一个空的默认构造函数
T
, construct()
具有空成员函数的自定义分配器的定义和使用。
然而,这两种解决方案都远非优雅,而且也有缺点。前者不能用作T
POD 类型,例如double
. 后者需要 C++ 标准库的给定实现来支持相对较新的DefaultInsertable
概念。此外,自定义分配器的定义非常繁琐。
有没有可能在 C++ 的未来有一些直接的方法来“关闭”这个默认插入/值初始化?
更新
Mayebe,我应该简单地问一下是否可以避免对算术类型的向量的默认插入元素进行零初始化。