审查生成的 Packet 所有者

来自 移动语义
C++23 (GCC 13.3.0) 高级 6分钟 找出 4处问题

审查这个生成的资源所有型 Packet 及其工厂函数。

实现只可移动的 Packet,使其拥有动态字节数组,并能从 load_packet 高效返回。

C++
class Packet {
public:
    explicit Packet(std::size_t size)
        : data_(new unsigned char[size]), size_(size) {}
    ~Packet() { delete[] data_; }
    Packet(const Packet&) = delete;
    Packet& operator=(const Packet&) = delete;
    Packet(Packet&& other) noexcept
        : data_(other.data_), size_(other.size_) {}
    Packet& operator=(Packet&& other) noexcept {
        delete[] data_;
        data_ = other.data_;
        size_ = other.size_;
        other.data_ = nullptr;
        other.size_ = 0;
        return *this;
    }
private:
    unsigned char* data_;
    std::size_t size_;
};
Packet load_packet(std::size_t size) {
    Packet packet(size);
    return std::move(packet);
}

生成代码仅作示例,不代表任何特定模型

在试验场中打开
报告错误