私はSOを少し検索しましたが、私の問題に正しく答えるものを見つけることができませんでした(これ、これ、およびこれを読みました)
現在、ポリモーフィズムでスマート ポインターを使用しようとしています。
実装へのポインターを使用して抽象クラスへのスマートポインターを作成しようとすると、次のようになります。
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);
これによりOOSpectrometer
、抽象クラスISpectrometer
(および m_spectroWrapper の単純なパラメーター) から継承されます。
MSVC が表示するエラー (フランス語なので、英語のメッセージとは異なる可能性があります) は次のとおりです。
error C2259: OOSpectrometer : can't instantiate an abstract class due to the following members :
そして、 にある純粋仮想関数を一覧表示しますISpectrometer
。