Недавно я видел своего коллегу, использующего std::string
в качестве буфера:
std::string receive_data(const Receiver& receiver) {
std::string buff;
int size = receiver.size();
if (size > 0) {
buff.resize(size);
const char* dst_ptr = buff.data();
const char* src_ptr = receiver.data();
memcpy((char*) dst_ptr, src_ptr, size);
}
return buff;
}
Я думаю, что этот парень хочет воспользоваться автоматическим уничтожением возвращаемой строки, поэтому ему не нужно беспокоиться об освобождении выделенного буфера.
Это выглядит немного странно для меня, так как согласно cplusplus.com метод data()
возвращает const char*
указывающий на буфер, внутренне управляемый строкой:
const char* data() const noexcept;
Запоминание константного указателя на символ? AFAIK это не вредит, пока мы знаем, что мы делаем, но я что-то пропустил? Это опасно?