其他分享
首页 > 其他分享> > 智能指针遇到的一些解答

智能指针遇到的一些解答

作者:互联网

1. auto_ptr 不建议使用的原因:

auto_ptr 采用 copy 语义来转移指针资源,转移指针资源的所有权的同时将原指针置为 nullptr,这跟通常理解的 copy 行为是不一致的(不会修改原数据),而这样的行为在有些场合下不是我们希望看到的。

例如参考《Effective STL》第 8 条,sort 的快排实现中有将元素复制到某个局部临时对象中,但对于 auto_ptr,却将原元素置为 null,这就导致最后的排序结果中可能有大量的 null。

而现在 C++11 的对 move 语义的支持,使得这样的资源转移通常只会在必要的场合发生,
例如转移一个临时变量(右值)给某个 named variable(左值),
或者一个函数的返回(右值)

这也就是用 unique_ptr 代替 auto_ptr 的原因,
本质上来说,就是 unique_ptr 禁用了 copy,而用 move 替代。

参考:auto_ptr的缺陷在哪里?为什么不应该用?

 

标签:null,auto,move,指针,智能,copy,ptr,解答
来源: https://www.cnblogs.com/strive-sun/p/15768622.html