对象属性同级访问

Object property sibling access

本文关键字:访问 属性 对象      更新时间:2023-10-16

我正在制作一个带有调试控制台的游戏。它的结构如下:

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.
  • 我不想创建loop的另一个debugger.

如何授予loop访问debugger的权限?

按照 Sam Varshavchik 的建议使用shared_ptr

多个shared_ptr对象可能拥有同一个对象。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;
}