我與unique_ptr和右值移動哲學混淆。那麼unique_ptr可以在stl集合中安全使用嗎?
比方說,我們有兩個類別:
std::vector<std::auto_ptr<int>> autoCollection;
std::vector<std::unique_ptr<int>> uniqueCollection;
現在我希望下面的失敗,因爲沒有告訴什麼算法內部做,也許使內部樞副本之類的,這樣翻錄離開auto_ptr的所有權:
std::sort(autoCollection.begin(), autoCollection.end());
我明白了。編譯器正確地禁止了這種情況發生。
但後來我這樣做:
std::sort(uniqueCollection.begin(), uniqueCollection.end());
這編譯。我不明白爲什麼。我不認爲unique_ptrs可以被複制。這是否意味着無法採用樞軸值,因此排序效率較低?或者這個樞軸實際上是一個移動,事實上它與auto_ptrs的集合一樣危險,應該被編譯器禁止?
我想我錯過了一些關鍵信息,所以我熱切地等待有人給我提供aha!時刻。
其實編譯器*應該*抱怨'std :: vector> autoCollection;'因爲COAPS(自動指針的容器)不允許在任何描述中。 –
2010-05-20 18:55:45
使用VS2010。我甚至沒有在/ W4發出警告。 – DanDan 2010-05-20 19:42:04
或收到auto_ptr折舊的警告。 – DanDan 2010-05-20 20:01:34