当前位置:  开发笔记 > 编程语言 > 正文

从std :: enable_shared_from_this和抽象基类派生是否可以?

如何解决《从std::enable_shared_from_this和抽象基类派生是否可以?》经验,为你挑选了0个好方法。

我正在编写一个应该从抽象基类派生的类.我无法更改抽象基类.该类将作为shared_ptr抽象基类保存.是否可以从抽象基类继承而且 enable_shared_from_this?像这样:

class IWidget {
public:
  virtual ~IWidget(){}
  // ...
};

class Widget : public std::enable_shared_from_this, public IWidget {
protected:
  Widget();  // protected, use create
public:
  static std::shared_ptr create() {
    return std::shared_ptr(new Widget(init));
  }
  // ...
};

这里有更完整的代码似乎有效.

我能找到的大多数例子enable_shared_from_this都在基类上.在这种情况下,我无法更改基类.可以使用多重继承并在派生类上使用它吗?

我有点担心,我只能保证enable_shared_from_this只有在我创建了一个shared_ptr但是在这种情况下我才能创建一个shared_ptr.

更新:我注意到的一件有趣的事情是,如果我将create方法更改为:

  IWidget* w = new Widget(init);
  return std::shared_ptr(w);

我尝试使用时遇到运行时错误shared_from_this().我认为这是有道理的.shared_ptr有一个带有"可转换"指针的模板化构造函数.除非shared_ptr构造函数知道它正在采取Widget它不知道它来自enable_shared_from_this它并且它不能存储weak_ptr.我只是想知道这种行为是否有记录.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有