c++ - 对象属性兄弟访问

标签 c++ c++11 visual-c++

我正在使用调试控制台制作游戏。它的结构如下:

class Game
{
    bool debugMode;
    // ...
    std::unique_ptr<Loop> loop;
    std::unique_ptr<Debugger> debugger;
    // ...
}

它在类函数中工作得很好:

void Game::init()
{
    // ...
    loop = std::make_unique<Loop>();

    if (debugMode)
    {
        debugger = std::make_unique<Debugger>();
        debugger->console->write(L"Game initialized."); // works great!
    }
}

但是如果我想在 loop 中向控制台写入一些内容怎么办?

  • 我不想将 debugger 传递给 loop
  • 我不想创造 循环中的另一个调试器

如何为 debugger 提供 loop 访问权限?

最佳答案

使用 shared_ptr正如 Sam Varshavchik 所建议的那样。

Several shared_ptr objects may own the same object.1

现在我已经开始工作了,如果你感兴趣的话:

class Game
{
    bool debugMode;
    // ...
    std::unique_ptr<Loop> loop;
    std::shared_ptr<Debugger> debugger;
    // ...
}

init 函数:

void Game::init()
{
    // ...

    if (debugMode)
    {
        debugger = std::make_unique<Debugger>();
        loop = std::make_unique<Loop>(debugger);
        debugger->console->write(L"Game initialized."); // works great!
    }
    else
    {
        loop = std::make_unique<Loop>();
    }
}

Loop 构造函数:

Loop::Loop(std::shared_ptr<Debugger> debugger) : Loop()
{
    this->debugger = debugger;
}

关于c++ - 对象属性兄弟访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45900581/

相关文章:

c++ - seekg 是如何找到文件末尾的?

c++ - MAKE 的 GCcflags从哪里传递?

用于模板类的 C++ std::tr1::hash

c++ - 在 GCC 上与 "-ffast-math"的 quiet_NaN 的浮点比较总是产生 true(!)

c++ - static_assert c++11 的可用性

c - VS2010 多项目解决方案 - 控制台和表单应用程序

c++ - 仅从 EnumDesktopWindows 识别应用程序窗口

c++ - 数组中是否也可以动态删除内存?

c++ - std::move 在 boost 库中的对应物

c++ - 帮助在 C++ 中声明和使用动态分配的数组