当前位置:  开发笔记 > 编程语言 > 正文

功能中的智能指针

如何解决《功能中的智能指针》经验,为你挑选了2个好方法。

这是严格的理论问题.当项目基于智能指针时,几乎所有类都使用它们来包装它们的指针成员,将普通指针传递给成员/非成员函数是不好的做法?我的意思是,拥有成员函数是否正确:

void Function(SomeClass* pSomeClass);

或者它应该始终是:

void Function(std::shared_ptr pSomeClass);

如果传递const引用有任何重要后果(标准const特性除外),我也会徘徊:

void Function(const std::shared_ptr& pSomeClass)

当类std::unique_ptr用于保护其成员时的情况如何,例如,在类私有成员函数中使用指向其成员的指针?它应该包裹吗?或者它应该被视为设计错误?



1> emlai..:

如果函数只需要指向对象并且它必须始终是有效对象,而不是null,则通过引用传递对象(const或非const,具体取决于通常的规则).

如果函数只需要指向对象,或者可选地为null,则按原始指针传递(按常规规则传递给const或非const).

如果函数需要共享指向对象的所有权,则传递shared_ptrby值.

如果函数需要修改shared_ptr对象的句柄(例如reset),则传递shared_ptr非const引用.

如果函数需要访问shared_ptr句柄上的信息(如use_count),但不应修改shared_ptr,则传递shared_ptrby const引用.



2> Jens..:

我认为Herb Sutter对此有一些很好的答案.有一个关于智能指针使用的GotW,以及 他最近的演示文稿,他在其中介绍了这一点.新的C++核心指南有一个关于智能指针使用的完整部分.

简而言之,这一切都归结为"将智能指针作为参数仅用于明确表达生命周期语义".如果你传递一个智能指针,这应该意味着你说话/参与所有权,无论是共享还是独特.对于非拥有参数,原始指针或(const)引用是当前的建议.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有