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;
}
posted @ 2025-08-29 16:40  杰西卡若  阅读(11)  评论(0)    收藏  举报