我与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