Elegant avoiding of value-initialization of vector elements in future C++?

Viewed 495

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:

  1. definition of an empty default constructor for T,
  2. 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.

1 Answers
Related