随着新标准的到来(以及某些编译器中已经提供的部分),新类型std::unique_ptr应该是std::auto_ptr.
std::unique_ptr
std::auto_ptr
它们的用法是否完全重叠(所以我可以对我的代码进行全局查找/替换(不是我会这样做,但如果我这样做了))还是我应该知道阅读文档中不明显的一些差异?
此外,如果它是直接替换,为什么要给它一个新名称而不仅仅是改进std::auto_ptr?
您不能进行全局查找/替换,因为您可以复制一个auto_ptr(具有已知后果),但unique_ptr只能移动一个。任何看起来像的东西
auto_ptr
unique_ptr
std::auto_ptr<int> p(new int); std::auto_ptr<int> p2 = p;
至少要变成这样
std::unique_ptr<int> p(new int); std::unique_ptr<int> p2 = std::move(p);
至于其他区别,unique_ptr可以正确处理数组(它会调用delete[],而auto_ptr会尝试调用delete.
delete[]
delete