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.
当两个a和b走出去的范围,该DerivedClass对象将被销毁.
如果您需要通过a(例如,非虚函数DerivedClass)访问特定于派生类的函数,您可以使用:
boost::dynamic_pointer_cast<DerivedClass>(a)->SomeFunctionOnlyInDerivedClass();
Run Code Online (Sandbox Code Playgroud)
当然,这只是一个简洁的例子,显示了用法.在生产代码中,DerivedClass在取消引用指针之前,您几乎肯定会测试成功的强制转换.
| 归档时间: |
|
| 查看次数: |
6248 次 |
| 最近记录: |