我最近看到我的一位同事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;
Memcpying到一个const char指针?AFAIK只要知道我们所做的事情就不会造成伤害,但是我错过了什么吗?这很危险吗?
data()
有一个重载,它返回指向非const限定char的指针。