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++ 防止 Murphy,而不是 Machiavelli。
关于c++ - 唯一指针如何保证唯一性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26142490/