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

标签 c++ c++11 stl

这是我的代码:

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/

相关文章:

c++ - 为什么这里不对引用初始化执行复制初始化?

c++ - 有没有办法在 C++ 中像这样初始化 3D 数组?

c++ - 右值或左值 (const) 引用参数

c++ - 为什么未指定 std::reverse_iterator::operator[] 的返回类型?

c++ - 如何使用 visual c++ 中的 strncpy_s 函数?

c++ - 为什么 C++ 仍在使用 stdio.h?

c++ - 如何围绕缓冲区创建 vector ?

c++ - STL Map - 显示 find() 函数指向的内容

c++ - 构建 Hugin 项目 - 未找到 boost

c++ - 检查 Qt c++ 应用程序是否以 sudo 运行