这是我的代码:
class Model;
class Resources
{
public:
Resources() :
initialized(false)
, pathToSkyBoxModel("E:\\C++\\OpenGLtutorial\\resources\\cube.obj")
{};
void Init(const ShaderProgram& shaderProgram);
/* Setters */
void SetSkyBoxModelPath(std::string&& newPath) { pathToSkyBoxModel = newPath; };
/* Getters */
bool IsInitialized() const noexcept { return initialized; };
const std::string& GetPathToSkyBoxModel() const noexcept { return pathToSkyBoxModel; };
DiffuseTexture default_texture;
TransparentTexture default_transparent_texture;
private:
std::unique_ptr<Model> pModel;
bool initialized;
};
我试图通过使用 std::unique_ptr 作为资源类成员 pModel 来避免循环依赖。不幸的是,我收到如下编译错误:“您不能在此处使用部分定义的类”。但它适用于 std::shared_ptr 和公共(public)指针。 std::unique_ptr 有什么问题?
最佳答案
问题是编译器尝试声明内联析构函数,为此它需要类的完整定义。
您可以通过在 .h
中声明析构函数并在 /.cpp
中定义它来解决这个问题
//in .h
~Resources();
//in cpp
Resources::~Resources() {}
关于c++ - 为什么我不能使用 std::unique_ptr 来避免循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38966847/