我有一个简单的 RAII 包装器来管理某个资源。这是界面:
struct ResourceWrapper
{
explicit ResourceWrapper(RESOURCE resource);
ResourceWrapper(const ResourceWrapper& other);
ResourceWrapper& operator=(const ResourceWrapper& other);
~ResourceWrapper();
ResourceWrapper(ResourceWrapper&& other) = delete;
ResourceWrapper& operator=(ResourceWrapper&& other) = delete;
};
std
这里的问题是,一旦我明确删除移动赋值运算符,我就不能再将这个类与容器和算法一起使用。显然我确实需要删除或正确实施它,因为我刚刚学会了艰难的方式。
另一种选择是通过常规赋值运算符实现移动赋值,但我不确定如何正确执行此操作。我想我需要类似的东西std::remove_reference
?我想知道它是否会过多地删除一个引用并导致创建不必要的临时对象。