非拥有智能指针

时间:2017-02-15 16:26:10

标签: c++ pointers stl

从C ++ 11开始,我们就拥有了一套相当完整的智能指针类型:

  • STD :: shared_ptr的
  • 的std ::的weak_ptr
  • 的std ::的unique_ptr
  • std :: auto_ptr(不建议使用)

但缺少的是一个没有所有权的智能指针,与上述集成在一起。

这似乎导致开发人员讨论了一个有点松散的分类,通常会有像“非拥有智能指针”这样的短语。但是这不是我想在我的代码中命名指针包装模板时使用的好名字。

对于非拥有智能指针,是否有更好的代码友好名称的建议?

template<typename T>
struct NonOwningSmart_pointer;

有std :: weak_ptr并没有真正满足要求,因为它需要shared_ptr。

更新:唯一命名这种类型的智能指针的主要好处是代码清晰度,构造为nullptr并与其他std指针类型很好地配合。

2 个答案:

答案 0 :(得分:4)

甚至有人建议这样的事情: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4282.pdf

在那里,它被命名为观察者_ptr&#39; 该提案遭到拒绝,但最近在Boost邮件列表上讨论了相同的想法(有一些更积极的反馈)。

答案 1 :(得分:1)

C ++核心指南似乎建议对非拥有指针使用原始指针。我猜,从技术上讲,他们说使用智能指针来表明所有权并假设原始指针是非拥有的。我想这不排除使用智能指针作为非拥有指针,但我没有看到它将提供什么优势。