When elements are default-inserted into an instance of std::vector<T>
, they are value-initialized by default. I often work with multi-threaded high-performance codes, where such value-initialization might for large arrays represent an unacceptable sequential bottleneck.
The typical approach based on reserve()
and push_back()
/emplace_back()
is of no use if in concurrent codes. I usually end up with one of the following options:
- definition of an empty default constructor for
T
, - definition and usage of a custom allocator with empty
construct()
member function.
However, both solutions are far from being elegant and also have drawbacks. The former cannot be used for T
being a POD type, such as double
. The latter requires a given implementation of the C++ Standard Library to supoort the relatively new DefaultInsertable
concept. Moreover, definition of a custom allocator is quite tedious.
Is there any chance that in the future of C++ there will be some straightforward way how to "turn off" this default-insertion/value-initialization?
UPDATE
Mayebe, I should've asked simply if it will be possible to avoid zero-initialization of default-inserted elements of a vector for arithmetic types.