我搜索了一下,但找不到任何能正确回答我的问题的东西(我读过这个,这个和这个)
我目前正在尝试使用具有多态性的智能指针。
当我尝试使用指向实现的指针创建指向抽象类的智能指针时,即:
std::shared_ptr<Abstract> ptr = std::make_shared(new Implementation);
Abstract
即使我尝试创建指向Implementation
.
在这种情况下,我可能只是使用完全错误的智能指针,但是我不知道我做错了什么(并且 Visual Studio 没有在我提到的行下划线)。
我想知道当需要多态性时是否可以使用智能指针,如果可以,必须如何使用。
注意:我知道协方差,以及 shared_ptr不是继承 shared_ptr 的类型,但认为智能指针可以处理这个事实。
编辑 :
根据要求,真正的代码行是:
std::shared_ptr<ISpectrometer> ret = std::make_shared<OOSpectrometer>(m_spectroWrapper);
从OOSpectrometer
抽象类继承ISpectrometer
(和 m_spectroWrapper 一个简单的参数)。
MSVC 给我的错误(它是法语,因此可能与英文消息不同)是
error C2259: OOSpectrometer : can't instantiate an abstract class due to the following members :
然后它列出了 中的纯虚函数ISpectrometer
。