我有一个简单的RAII包装管理某些资源。这里的接口:如何删除移动赋值运算符并保留与std容器的兼容性?
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
这样的东西?我想知道它是否会删除太多参考文献,并导致创建不必要的临时对象。
你阻止移动,但促进复制?听起来怪怪的。它是什么资源? –
@DavidHaim:确实如此。无论它是什么资源都无所谓,我只想尽可能少地使用代码。我不能放弃复制,但我可以放弃移动。 –
放下移动的方法是不定义它,你所做的不是“放下移动”,而是“毒素移动,因此不可能复制右值”。这不一样。 –