微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

std :: enable_shared_from_this <>和多重继承

如何解决std :: enable_shared_from_this <>和多重继承

当我尝试运行此代码时,我得到bad_weak_ptr异常:

using namespace std; 

class O {
    public:
        O() {}
};
  
class A : public std::enable_shared_from_this<A>,virtual public O {
    public: 
        A() {}
};

class B : public std::enable_shared_from_this<B>,virtual public O {
    public: 
        B() {}
        void GetShared() { 
            shared_from_this();
        }   
};

class C : public A,public B {
public:
    C()  {}
};
  
int main() 
{ 
    std::shared_ptr<B> pt = std::make_shared<C>();
    pt->GetShared();
}

我想创建C类的实例,但随后返回B shared_ptr,因为这是其他接口所需要的。有没有办法解决代码?我似乎无法做到这一点。

解决方法

据我所知,您正在尝试做不可撤销的事情:

C ++中的继承意味着您还包括父类的相同成员。但是,对于class C来说,这意味着应该由std::shared_ptr保留2个类。但是通过继承,您可以告诉编译器C应该包含A不包含的Bstd::shared_ptr的子实例。 shared_from_this在运行时会因为严重的弱ptr异常而抱怨这一事实。

可能您希望C仅由std::shared_ptr持有,然后可以转到附加的代码。

如果您只是想“上传” C的实例(即使用它,因为它是B的类,则可以简单地使用B&或使用{{ 1}}中没有std::shared_ptr,或者仅在最高级别的课程中。

std::enables_shared_from_this

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。