我最近看到我的一个同事使用 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;
Memcpy-ing 到 const char 指针 ?AFAIK 这没有伤害,只要我们知道我们做什么,但我错过了什么吗?这很危险吗?