I use std::string to hold arbitrary blobs of binary data. It works this way, but is slightly inefficient as it needs to add the null terminator to the end of the blob. (C++11 spec is that c_str() and data() are the same, and return a pointer to a blob with a null terminator at the end.) Is there a better type to use, that still supports common operations (copy constructor, assignment operator, etc)?