该函数需要返回一个shared_ptr
指向StructA
.
struct StructA
{
// complicated struct that also holds other sub-structure
....
};
const boost::shared_ptr<const StructA&>& GetStructA(...)
{...} #0.5
const boost::shared_ptr<const StructA>& GetStructA(...)
{...} #0
const boost::shared_ptr<StructA>& GetStructA(...)
{...} #1
const boost::shared_ptr<StructA> GetStructA(...)
{...} #2
boost::shared_ptr<const StructA>
{...} #3
boost::shared_ptr<StructA> GetStructA(...)
{...} #4
boost::shared_ptr<StructA>& GetStructA(...)
{...} #5
boost::shared_ptr<StructA&> GetStructA(...)
{...} #6
有很多选择,我相信其中一个是最好的(如果还有人请指出)。
就个人而言,我更喜欢使用#0
const boost::shared_ptr<const StructA&>& GetStructA(...)
{...} #0
遗留系统使用#2
const boost::shared_ptr<StructA> GetStructA(...)
{...} #2
我更喜欢选择#0的原因如下:
return const shared_ptr,因此该函数的调用者不应更改返回的 shared_ptr 可能指向内部数据结构
通过引用返回,这样我就可以避免 +/- 的 shared_ptr 的引用计数
shared_ptr 持有 const StructA&,因此调用者无法更改 const shared_ptr 的内容。如果我是对的,即使 shared_ptr 是 const,它也不能阻止调用者更改指向的数据,除非数据是 const。
请
- 如果我犯了任何错误,请纠正我的理解
- 为此函数提供最佳返回签名。
谢谢