该cplusplus.comshared_ptr
页面召唤出一个区分空 std::shared_ptr
和空 shared_ptr
。该cppreference.com页面没有明确叫出区别,但同时使用“空”,并比较nullptr
其描述std::shared_ptr
行为。
空和空值之间有区别shared_ptr
吗?这种混合行为指针有什么用例?非空nullshared_ptr
甚至有意义吗?在正常使用情况下(如果您没有显式构造一个)会出现一个空但非空的情况shared_ptr
吗?
如果您使用的是Boost版本而不是C ++ 11版本,这些答案是否会改变?
这是shared_ptr
行为的一个怪异角落。它有一个构造函数,可以让你做出shared_ptr
该拥有的东西,点别的东西:
template< class Y >
shared_ptr( const shared_ptr<Y>& r, T *ptr );
shared_ptr
使用此构造函数的构造方法与共享所有权r
,但指向任何ptr
指向的点(即,调用get()
或operator->()
将返回ptr
)。这对于ptr
指向拥有的对象的子对象(例如,数据成员)的情况非常方便r
。
你的页面链接的电话shared_ptr
拥有没什么空,并且shared_ptr
它指向什么(即它的get() == nullptr
)空。(标准在这种意义上使用Empty;不使用null。)您可以构造一个null-not-not-empty shared_ptr
,但它不是很有用。空但shared_ptr
非空本质上是一个非所有的指针,它可以用来做一些奇怪的事情,例如将指向分配给堆栈的东西的指针传递给期望a的函数shared_ptr
(但我建议对放置shared_ptr
在其中的任何对象进行打孔API)。
boost::shared_ptr
也有这个构造器,他们称之为别名构造器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句