独特指针如何确保唯一性?

时间:2014-10-01 13:25:02

标签: c++ unique-ptr

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

如何确保最后的陈述?

我不相信有“某人”是STL,他会检查已经存在的std::unique_ptr之一是否已经拥有原始指针。即使它是线性复杂度算法,这对于大量独特指针来说也是非常低效的。应该有一个很好的技巧,对吗?

2 个答案:

答案 0 :(得分:13)

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

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

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

unique_ptr不可复制,因此不小心创建了两个这样的指针。 C ++可以防止Murphy,而不是Machiavelli。

答案 1 :(得分:1)

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