如果我有返回,我沒有控制其源的類的實例的引用的函數,說list<int>
:防止返回值參考的拷貝構造和賦值
list<int>& f();
我要確保它的值是只分配給另一個參考,例如:
list<int> &a_list = f();
如果用戶是不是要做到:
list<int> a_list = f(); // note: no '&', so the list is copied
我希望它成爲編譯時錯誤,因爲用戶只會操作列表的副本而不是原始列表(這絕不是我的應用程序的預期/想要的)。
有沒有什麼辦法可以防止上述的複製構造和賦值(比如說通過某種「包裝」類)?
理想情況下,如果要使用某些包裝類,比如wrapper<T>
,我希望它適用於任何類型的對象T
。
是的,我知道,對於一個類,我做可以控制,我可以簡單地拷貝構造函數和賦值操作符private
,如:
class MyClass {
public:
// ...
private:
MyClass(MyClass const&);
MyClass operator=(MyClass const&);
};
禁止拷貝建設和任務;但是,如上所示,我想這樣做,例如,std::list
我不能簡單地複製構造函數和賦值運算符private
。
@GMan:當然這是微不足道的,因爲它是1個字符的錯誤;然而,忘記輸入'&'很容易。如果您仍然看不到這一點,那麼只需忽略問題並繼續。 – 2010-06-23 23:34:33
請注意,如果我問你爲什麼要這樣做? – fingerprint211b 2010-06-23 23:52:59
@Paul:但是這就像是說當你需要'x + = 1'時,你需要一種防止'x + 1'的方法。這是「讓我試着拯救你」的道路上的許多痛苦,而不是「你需要理解引用」。 – GManNickG 2010-06-24 00:04:39