我正在编写一个应该从抽象基类派生的类.我无法更改抽象基类.该类将作为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
.我只是想知道这种行为是否有记录.