boost :: shared_ptr并分配派生类

Jon*_*han 7 c++ boost variable-assignment shared-ptr

假设DerivedClass是从BaseClass
以下工作得出的?

boost::shared_ptr<BaseClass> a(new BaseClass());
boost::shared_ptr<DerivedClass> b(new DerivedClass());
a=b;
Run Code Online (Sandbox Code Playgroud)

在这个问题之后,我明白现在a指向派生并b指向基数(对吧?)

此外,现在如果我调用一个函数,a它会调用派生的实现吗?

Mic*_*eyn 13

...
a=b;
Run Code Online (Sandbox Code Playgroud)

你是要重新分配a,因此a b现在想都指向DerivedClass对象.该BaseClass对象将被销毁,因为此时它的引用计数将为零(由于a被重新分配以指向不同的对象).

a现在指向一个DerivedClass对象,虚函数调用(在其中定义BaseClass并覆盖DerivedClass)a将调用相应的成员函数DerivedClass.

当两个ab走出去的范围,该DerivedClass对象将被销毁.

如果您需要通过a(例如,非虚函数DerivedClass)访问特定于派生类的函数,您可以使用:

boost::dynamic_pointer_cast<DerivedClass>(a)->SomeFunctionOnlyInDerivedClass();
Run Code Online (Sandbox Code Playgroud)

当然,这只是一个简洁的例子,显示了用法.在生产代码中,DerivedClass在取消引用指针之前,您几乎肯定会测试成功的强制转换.