我与unique_ptr和右值移动哲学混淆。 假设我们有两个集合: std::vector<std::auto_ptr<int>> autoCollection; std::vector<std::unique_ptr<int>> uniqueCollection; 现在我期望下面的失败,因为没有告诉内部的algorithm是什么,也许做内部枢纽副本之类的东西,从而剥夺了auto_ptr的所有权: std::sort(autoCollection.begin(), autoCollection.end()); 我明白了 编译器正确地禁止这种情况发生。 但是,我这样做: std::sort(uniqueCollection.begin(), uniqueCollection.end()); 这个编译。 我不明白为什么。 我不认为unique_ptrs可以被复制。 这是否意味着一个枢轴值不能被采取,所以sorting效率较低? 或者这个枢轴实际上是一个移动,事实上,它与auto_ptrs的集合一样危险,应该被编译器所禁止? 我想我错过了一些关键的信息,所以我急切地等待有人给我提供啊哈! 时刻。
我听说在C ++ 11中不推荐使用auto_ptr 。 这是什么原因? 另外我想知道auto_ptr和shared_ptr之间的区别。
auto_ptr会在传入的C ++标准中被弃用吗? unique_ptr应该用于所有权转移,而不是shared_ptr? 如果unique_ptr不在标准中,那么我是否需要使用shared_ptr?
随着新的标准的到来(和一些编译器已经可用的部分),新的std::unique_ptrtypes应该是std::auto_ptr的替代品。 他们的使用是否完全重叠(所以我可以在我的代码上进行全局查找/replace(不是我会这样做,但是如果我这样做)),还是应该知道读取文档中不明显的一些差异? 另外,如果它是一个直接replace(为什么给它一个新的名字),而不是改善std::auto_ptr 。
为什么在标准容器中使用std::auto_ptr<>是错误的?