为什么我不能使用 std::unique_ptr 来避免循环依赖?

Why I can't use std::unique_ptr for avoiding circular dependency?

本文关键字:循环 依赖 ptr unique 不能 为什么 std      更新时间:2023-10-16

下面是我的代码:

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和公共指针。std::unique_ptr有什么问题

问题是编译器试图声明一个内联析构函数,为此它需要类的完整定义。

你可以通过在.h中声明析构函数并在/.cpp中定义它来绕过它

//in .h
~Resources();
//in cpp
Resources::~Resources() {}