我将省略相当多的代码,因为这些是一些相当大的对象,而我的问题实际上只涉及 std::make_shared 的操作。我在命名空间 SYNC 中有一个名为 D3D11Shader 的对象。这有一个名为的静态函数,
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 函数从不尝试创建此类的实例,只是派生和实现它的对象。在使用此函数和智能指针之前,我没有收到此错误。有谁知道这里发生了什么?