c++ - 唯一指针如何保证唯一性?

标签 c++ unique-ptr

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/

相关文章:

c++ - PROCESSENTERY32 结构中的 szExeFile 给出了一个奇怪的值

c++ - 引用声明是否为引用对象引入了一个新名称?

c++ - CListCtrl 多次显示插入的项目

c++ - 正确的(资源处理)零规则在哪里?

c++ - 为什么 unique_ptr 为空?

c++ - 类名后的模板参数是什么意思?

c++11 - std::unique_ptr 的唯一性

c++ - Visual Studio 自动将括号添加到函数名称

c++ - 指向 vector 中元素的指针

c++ - 是否可以将 SDL2 与智能指针一起使用?