我在想,如果我需要检查是否sp
是null
之前我用它。如果我错了,请纠正我,但是创建别名不会增加引用计数器,因此,通过进入该方法,我们正在使用共享指针,而该指针不知道嵌入式指针是否已在之前重置。假设这个?
Class::MyFunction(std::shared_ptr<foo> &sp)
{
...
sp->do_something();
...
}
在这方面,大多数共享指针与普通指针完全一样。您必须检查是否为空。根据功能,您可能需要切换到使用
void myFunction( Foo const& foo );
,并通过取消对指针的引用来调用它(这将确保指针对调用者的责任为空)。
另外,除非有一些特殊的所有权语义,否则使函数采用共享指针可能是一个坏习惯。如果函数仅在函数持续时间内使用指针,而不更改它或不拥有所有权,则原始指针可能更合适,因为它对调用者的约束较少。(但这实际上很大程度上取决于该函数的功能以及使用共享指针的原因。当然,您已经向共享指针传递了一个非常量引用这一事实假设您将要对其进行修改,因此传递共享指针可能是适当的。)
最后,共享指针的不同实现使得或多或少难检查空值。使用C ++ 11,您可以使用std::shared_ptr
,并且可以将其nullptr
自然地进行比较,这正是您所期望的。然而,Boost的实现在这方面有些破损。您不能仅将其与0
或进行比较NULL
。您必须boost::shared_ptr
为比较构造一个空值,或者调用get
它并比较生成的原始指针到0
或NULL
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句