1. 程式人生 > >shared_from_this多繼承時遇到的問題

shared_from_this多繼承時遇到的問題

#include <memory>
class A : public std::enable_shared_from_this<A>
{
public:
    A(){ a_name = "A";}
    virtual ~A(){}
    std::shared_ptr<A> get_share_ptr_A() { return shared_from_this();}

    std::string get_a_name(){ return a_name;}
private:
    std::string a_name;
};

class B : public
std::enable_shared_from_this<B> { public: B(){ b_name = "B";} virtual ~B(){} virtual std::shared_ptr<B> get_share_ptr_B() { return shared_from_this();} std::string get_b_name(){ return b_name;} private: std::string b_name; }; class C : public A, public B//, public boost::enable_shared_from_this<C>
{ public: C(){} ~C(){} std::shared_ptr<C> get_share_ptr_C() { return std::dynamic_pointer_cast<C>(std::enable_shared_from_this<A>::shared_from_this()); } }; void test_func() { std::shared_ptr<C> c(new C()); std::shared_ptr<C> pc = c->get_share_ptr_C(); std::cout
<<pc->get_share_ptr_A()->get_a_name()<<std::endl; std::cout<<pc->get_share_ptr_B()->get_b_name()<<std::endl; }
《shared_from_this需要注意的地方》只解決class C : public A的情況。要是遇到上面的情況那該如何呢?
    std::cout<<pc->get_share_ptr_A()->get_a_name()<<std::endl;
    std::cout<<pc->get_share_ptr_B()->get_b_name()<<std::endl;
哪一句能夠成功和繼承順序有關,原理是一樣的。但是我沒找到合適的方法,所以還是選擇了繞過這個問題,即不使用多繼承。