【问题标题】:Converting this to a std::shared_ptr将其转换为 std::shared_ptr
【发布时间】:2014-01-06 00:00:37
【问题描述】:

我在当前的代码库中遇到了一个小问题。我正在尝试实例化 ShockRenderSystem 类的新 std::shared_ptr。 ShockRenderSystem 的构造函数采用 ShockGame 类的 std::shared_ptr 和在这种情况下不相关的 sf::VideoMode。这是我正在尝试执行的代码(m_render_system 是 std::shared_ptr):

m_render_system = std::shared_ptr<ShockRenderSystem>(new ShockRenderSystem((static_cast<std::shared_ptr<ShockGame> >(this)), mode));

我正在尝试将this 转换为可以传递给构造函数的 std::shared_ptr。请注意,此代码位于 ShockGame 的构造函数中。

我收到错误消息:no matching function for call to 'SE::ShockRenderSystem::ShockRenderSystem(std::shared_ptr&lt;SE::ShockGame&gt;*, sf::VideoMode&amp;)' candidate is: SE::ShockRenderSystem::ShockRenderSystem(std::shared_ptr&lt;ShockGame&gt;, sf::VideoMode)

感谢您的所有帮助!

【问题讨论】:

  • 您不能只使用任何旧指针并将其转换为智能指针。也就是说,我在这里没有看到编译器看到的 syntax 问题。你没有传递std::shared_ptr&lt;SE::ShockGame&gt;*
  • 为什么要构造一个带有指向自身的共享指针的对象?!
  • 我不是。我正在尝试将共享指针传递给另一个类。基本上,我只是想将这个(指向 ShockGame)转换为 std::shared_ptr 以传递给构造函数 ShockRenderSystem。

标签: c++ pointers memory this smart-pointers


【解决方案1】:

std::enable_shared_from_this 派生ShockGame

【讨论】:

    【解决方案2】:

    对于任何来到此线程的人,请记住将您的 this 指针替换为 shared_from_this()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 2017-08-06
      • 1970-01-01
      • 2016-08-08
      • 2023-03-24
      • 2018-02-25
      相关资源
      最近更新 更多