【发布时间】:2013-05-10 02:30:17
【问题描述】:
我搜索了一下,但找不到任何可以正确回答我问题的内容(我已阅读 this、this 和 this)
我目前正在尝试使用具有多态性的智能指针。
当我尝试使用指向实现的指针创建指向抽象类的智能指针时,即:
std::shared_ptr<Abstract> ptr = std::make_shared(new Implementation);
我的编译器 (MSVC2012) 显示有关创建 Abstract 实例的错误,这是不可能的,因为它具有纯虚拟,即使我尝试创建指向 Implementation 的指针。
在这种情况下,我可能只是完全错误地使用了智能指针,但是我不知道我做错了什么(而且 Visual Studio 没有在我提到的那一行下划线)。
我想知道当需要多态性时是否可以使用智能指针,如果可以,必须如何使用。
注意:我知道协方差,以及 shared_ptr 不是继承 shared_ptr 的类型这一事实,但我认为智能指针可以处理这个问题。
编辑:
根据要求,真正的代码行是:
std::shared_ptr<ISpectrometer> ret = std::make_shared<OOSpectrometer>(m_spectroWrapper);
使用继承自抽象类ISpectrometer 的OOSpectrometer(和m_spectroWrapper 一个简单的参数)。
MSVC 给我的错误(它是法语,所以可能与英文消息不同)是
error C2259: OOSpectrometer : can't instantiate an abstract class due to the following members :
然后它列出了ISpectrometer中的纯虚函数。
【问题讨论】:
标签: c++ c++11 polymorphism shared-ptr smart-pointers