documentation of boost::shared_ptr说:
只要shared_ptr<T>
,
shared_ptr<U>
就可以隐式转换为T*
可以隐式转换为U *。特别是shared_ptr<T>
隐式转换为shared_ptr<T const>
,转换为shared_ptr<U>
U
是T
和shared_ptr<void>
的可访问基础。
但是如果在这样做的话,我没有找到任何书面内容,它会增加参考计数器。
我尝试了以下代码,it works:
struct A {
virtual int foo() {return 0;}
};
struct B : public A {
int foo() {return 1;}
};
int main() {
boost::shared_ptr<A> a;
{
boost::shared_ptr<B> b(new B());
a = b;
}
std::cout << a->foo() << std::endl; ///Prints 1
}
所以假设总是这样,但我找不到可以证实这一点的信息来源。
答案 0 :(得分:0)
好的,当我写完问题时,我终于在copy constructor documentation
中找到了答案shared_ptr(shared_ptr const & r); // never throws template<class Y> shared_ptr(shared_ptr<Y> const & r); // never throws
要求:Y *应该可以转换为T *。
效果:如果r为空,则构造一个空的shared_ptr; 否则,构造一个与r 共享所有权的shared_ptr。
后置条件:
get() == r.get()
&amp;&amp;的use_count() == r.use_count()
强>
所以答案是是。