class Resource {
Handle resource_handle;
public:
friend void swap(Resource &a, Resource &b); // swap for the partial copy/swap idiom
Resource(); // Default with uninitialized handle whose destruction is a noop
Resource(std::string location); // Construction of resource (e.g. load something from disk)
Resource(Resource &&other); // Move constructor to receive from returns of functions
Resource &operator=(Resource other); // Sawp assignment to implement copy/swap idiom
Resoruce(Resource &other) = delete; // You can not copy resources
Resource &operator=(Resource &other) = delete; // You can not copy resources
};
管理资源句柄(文件句柄、gpu 句柄、互斥体)的类希望防止资源句柄被复制,因此包装类的解构会自动释放资源一次且只有一次,并且没有任何东西可以访问句柄不再是因为对象的生命周期已经结束并且(希望)不再存在指向包装器的引用或指针。
5(半)的复制/交换和规则表示通常您要定义复制构造函数/赋值运算符。复制资源句柄显然是不需要的。我是否理解正确,因此只需删除任何其他构造函数/赋值运算符就可以解决这个问题(如果我分配了未转换为右值的东西(因此在分配完成后不再存在),编译器会冲我大喊大叫))
这与这个问题有关,因为我要构造的资源实际上只有在它们所属的包含数据结构已经构造之后才能构造,因此有必要移动资源,而不是复制它们。