小编典典

std::auto_ptr 到 std::unique_ptr

all

随着新标准的到来(以及某些编译器中已经提供的部分),新类型std::unique_ptr应该是std::auto_ptr.

它们的用法是否完全重叠(所以我可以对我的代码进行全局查找/替换(不是我会这样做,但如果我这样做了))还是我应该知道阅读文档中不明显的一些差异?

此外,如果它是直接替换,为什么要给它一个新名称而不仅仅是改进std::auto_ptr


阅读 216

收藏
2022-07-01

共1个答案

小编典典

您不能进行全局查找/替换,因为您可以复制一个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.

2022-07-01