【发布时间】:2020-09-25 04:13:36
【问题描述】:
假设我有两个类,Base 和 Derived,其中 Derived 继承自 Base。现在,假设我执行以下代码:
shared_ptr<Derived> derivedPtr = make_shared<Derived>();
shared_ptr<Base> basePtr = derivedPtr;
将derivedPtr 复制到basePtr 是否会导致derivedPtr 的引用计数被更新(使derivedPtr.use_count() 和basePtr.use_count() 等于2)?或者,由于shared_ptr 的两个实例是不同的类型,这两个实例是否会有一个不共享的单独引用计数(因此derivedPtr.use_count() 和basePtr.use_count() 等于1)?
【问题讨论】:
-
除了标准库实现中的错误(非常罕见),这应该很容易测试。你试过了吗?你的尝试告诉你什么?
-
是的。你甚至可以这样做:
struct Foo { double x; double y; }; auto p = make_shared<Foo>(5.0, 10.0); auto py = weak_ptr(shared_ptr(p, &p->y);)... 伪代码,因为我现在不在电脑旁。 -
刚刚测试了这个,确实,引用计数已更新。
标签: c++ c++11 inheritance polymorphism shared-ptr