std::unique_ptr
是一个智能指针,它通过指针保留对象的唯一所有权,并在unique_ptr
超出范围时销毁该对象。 没有两个unique_ptr
个实例可以管理同一个对象。
如何确保最后的陈述?
我不相信有“某人”是STL,他会检查已经存在的std::unique_ptr
之一是否已经拥有原始指针。即使它是线性复杂度算法,这对于大量独特指针来说也是非常低效的。应该有一个很好的技巧,对吗?
答案 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变为空。