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

shared_ptr: Does the reference count increase when copying in a shared_ptr of the base class?

本文关键字:shared ptr 引用 是否 增加 基类 复制      更新时间:2023-10-16

boost::shared_ptr的文档说:

只要T*shared_ptr<T>都可以隐式转换为shared_ptr<U> 可以隐式转换为 U*。特别是,shared_ptr<T> 隐式转换为shared_ptr<T const>,以shared_ptr<U>其中 UT的可访问基础,并且shared_ptr<void>

但是我没有找到任何地方写的,如果这样做会增加引用计数器。

我尝试了以下代码,它可以工作:

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
}

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

好的,当我写完问题时,我终于在复制构造函数文档中找到了答案

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()& &use_count() == r.use_count() .

所以,答案是肯定的