C++ 为什么需要移动语义?
为什么需要移动语义?
拷贝构造是将原来的资源的值原封不动的再次生成一份。移动构造是将原来资源的值在变成自己的。
class Buffer {
char* data_;
size_t size_;
public:
Buffer(const Buffer& rhs) // 拷贝构造
: data_(new char[rhs.size_]) // ① 重新申请一块一样大的内存
, size_(rhs.size_)
{
std::memcpy(data_, rhs.data_, size_); // ② 把字节全部复制过去
}
};
Buffer(Buffer&& rhs) noexcept // 移动构造
: data_(rhs.data_) // ① 直接把指针抢过来
, size_(rhs.size_)
{
rhs.data_ = nullptr; // ② 让原对象变成“空壳”
rhs.size_ = 0;
}

浙公网安备 33010602011771号