我有一個簡單的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:確實如此。無論它是什麼資源都無所謂,我只想盡可能少地使用代碼。我不能放棄複製,但我可以放棄移動。 –
放下移動的方法是不定義它,你所做的不是「放下移動」,而是「毒素移動,因此不可能複製右值」。這不一樣。 –