Off*_*rmo 10 c++ multiple-inheritance shared-ptr enable-shared-from-this
我有一个对象(Z),它来自另外两个对象(A和B).
A和B都从派生enable_shared_from_this<>分别enable_shared_from_this<A>和enable_shared_from_this<B>.
当然我打电话shared_from_this()给Z.当然编译器报告这个含糊不清.
我的问题是:
enable_shared_from_this<>还是会创建两个分开的引用计数(坏!)注意:当基类和派生类都继承自boost :: enable_shared_from_this但我没有真正回答时,我发现这个其他问题是坏的弱指针.我virtual也应该使用这个技巧吗?
eca*_*mur 14
是的,根据坏的指针,当base和派生类都从boost :: enable_shared_from_this继承时,解决方案是使用虚拟继承.这是C++ 11标准shared_ptr(不是Boost)的实现:
#include <memory>
struct virtual_enable_shared_from_this_base:
std::enable_shared_from_this<virtual_enable_shared_from_this_base> {
virtual ~virtual_enable_shared_from_this_base() {}
};
template<typename T>
struct virtual_enable_shared_from_this:
virtual virtual_enable_shared_from_this_base {
std::shared_ptr<T> shared_from_this() {
return std::dynamic_pointer_cast<T>(
virtual_enable_shared_from_this_base::shared_from_this());
}
};
struct A: virtual_enable_shared_from_this<A> {};
struct B: virtual_enable_shared_from_this<B> {};
struct Z: A, B { };
int main() {
std::shared_ptr<Z> z = std::make_shared<Z>();
std::shared_ptr<B> b = z->B::shared_from_this();
}
Run Code Online (Sandbox Code Playgroud)
这不是默认实现的一部分,可能是因为虚拟继承的开销.
| 归档时间: |
|
| 查看次数: |
7034 次 |
| 最近记录: |