简体   繁体   中英

c++ how to create std::string containing size uninitialized bytes?

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

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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM