i need a std::string of size
bytes, after constructing it i am going to write to every byte in that string prior to reading from it, thus null-initializing the string is a waste of cpu, this works:
std::string s(size,0);
but it's just slightly wasteful, it's basically like using calloc()
when all i need is malloc()
, so the question is, how do i construct a string of X uninitialized bytes?
(using reserve()+push is not an option because im giving the string to a C-api taking char*,size
to do the actual initialization)
edit: this thread seems to about the same issue/related (but with vectors instead of strings): Value-Initialized Objects in C++11 and std::vector constructor
A std::string isn't a pointer, so it shouldn't be combined. PS. the initializations are the same: the ctor of std::string sets it to the empty string.
Example. In below example for std::string::size. The size of str is 22 bytes.
std::string actually maintains the size as one of its data member.
You can't do it with std::string
. But it can be achieved different way, like using std::unique_ptr<char[]>
.
auto pseudo_string = std::unique_ptr<char[]>(new char[size]);
Or if your compiler supports C++20
auto pseudo_string = std::make_unique_for_overwrite<char[]>(size);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With