审查这个生成的资源所有型 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);
}
生成代码仅作示例,不代表任何特定模型