【发布时间】:2017-07-04 10:28:12
【问题描述】:
自 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 指针类型配合得很好。
【问题讨论】:
-
弱指针与“NonOwningSmart_pointer”有何不同?
-
据我了解,std::weak_ptr 始终与 std::shared_ptr 相关联。但是有 std::unique_ptr 和 raw。
-
为什么首先需要非拥有智能指针?比普通指针有什么好处?
-
好吧,如果您遵循 cpp 核心指南,那么原始指针始终是非拥有指针。只有
owner或智能指针被视为所有者。如果您使用这种方法,这种方式会让生活变得轻松,因为您只是假设所有原始指针都不是您要管理的。我个人喜欢这种方法。 -
可能会感兴趣/修改“Herb Sutter - 区分可能为空和永不为空是重要的事情”herbsutter.com/2017/02/15/…