shared_ptr:在基类的shared_ptr中复制时引用计数是否会增加?

时间:2015-04-17 13:45:22

标签: c++ shared-ptr c++98

documentation of boost::shared_ptr说:

  只要shared_ptr<T>

shared_ptr<U>就可以隐式转换为T*   可以隐式转换为U *。特别是shared_ptr<T>   隐式转换为shared_ptr<T const>,转换为shared_ptr<U>   UTshared_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
}

所以假设总是这样,但我找不到可以证实这一点的信息来源。

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()

所以答案是