唯一指针如何确保唯一性

How does unique pointer ensure uniqueness?

本文关键字:确保 唯一性 指针 何确保 唯一      更新时间:2023-10-16

std::unique_ptr是一个智能指针,它通过指针保留对象的唯一所有权,并在unique_ptr超出范围时销毁该对象没有两个unique_ptr实例可以管理同一个对象

如何确保最后一句话?

我不相信STL中有"某人"会检查已经存在的std::unique_ptr中是否有一个已经拥有原始指针。即使是一种线性复杂度算法,使用大量的唯一指针也会非常低效。应该有一个不错的技巧,对吧?

不能保证。名称是一个预期用途的声明,而不是运行时系统完全强制执行的任何保证。也就是说,您可以编写以下代码:

std::unique_ptr<int> i1(new int());
std::unique_ptr<int> i2(i1.get());

并且有两个unique_ptr引用同一个对象,但是程序有未定义的行为,因为它将删除指针两次。

unique_ptr是不可复制的,这使得意外创建两个这样的指针变得更加困难。C++保护的是墨菲,而不是马基雅维利。

之所以称其为唯一指针,是因为您无法复制唯一指针。您可以窃取它的值,但这会使原始unique_ptr为空。