これらはかなり大きなオブジェクトであるため、かなりのコードを省略します。私の質問は、実際にはstd::make_sharedの操作に関するものです。D3D11Shaderという名前空間SYNCにオブジェクトがあります。これには、と呼ばれる静的関数があります。
SYNC::D3D11Shader * SYNC::D3D11Shader::CreateInstance(const std::string & s)
これは文字列インデックスを取り、SYNC::D3D11Shaderから派生したシェーダーのインスタンスへのポインターを返します。ある時点で、スマートポインターを使用して、これらすべてのシェーダーを保持するベクター内でのこれらの割り当て解除を自動化し始めました。しかし、私がこれをするために行くとき、
std::shared_ptr<SYNC::D3D11Shader> shaderPtr;
// ... verification of index and other initialization happens here
// so i am unable to initialize it in it's constructor
shaderPtr = std::make_shared<SYNC::D3D11Shader>(SYNC::D3D11Shader::CreateShader(shaderName));
抽象クラスであるこの行のD3D11Shaderのインスタンスをインスタンス化しようとしているというコンパイラエラー。make_sharedが行ったのは、std::shared_ptrのインスタンスを返すことだけだと思いました。CreateInstance関数は、このクラスのインスタンスを作成しようとはしません。それを派生させて実装するオブジェクトだけを作成します。この関数とスマートポインターを使用する前は、このエラーは発生していませんでした。誰かがここで何が起こっているのか知っていますか?