首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我有一个对象将被实例化整个程序的持续时间,但是一个类成员不能实例化,我应该动态分配它吗?

我有一个对象将被实例化整个程序的持续时间,但是一个类成员不能实例化,我应该动态分配它吗?
EN

Stack Overflow用户
提问于 2020-07-02 17:08:50
回答 1查看 24关注 0票数 0

让我把我的问题说得更清楚一点:

我有一个游戏类,它在程序开始时被实例化,只有在程序生命周期结束时才被销毁。

我有一个"StartMenu“成员对象在我的游戏类中,我显然希望在游戏生命周期开始时可用,但是在用户开始游戏之后,它不应该占用内存。(根本没有理由这么做)。

我目前的解决方案是将StartMenu指针声明为成员,通过从构造函数调用的方法(如果需要的话)动态地分配内存给它,然后当用户希望玩游戏时,删除。这是一个很好的实践解决方案吗?是否应该更改设计,或者是否有更标准的“开始菜单”处理方式?

有关守则:

代码语言:javascript
复制
Class Game 
{
  private:
  StartMenu* startMenu_ptr;

  //Other  Game Vars
}

正在初始化

代码语言:javascript
复制
Game::initStartMenu() {
  startMenu_ptr = new StartMenu(); 
}

删除

代码语言:javascript
复制
Game::runStartMenu() {

if(startMenu_ptr->getOption()==1) {
  delete startMenu_ptr;
  startMenu_ptr = nullptr;
}

编辑:更多细节是必要的。runStartMenu从while循环每个帧调用,以检测更新和用户输入。此外,对startMenu的任何更新都会被记录下来,然后用单独的方法绘制(Game::render())来反映用户的输入。在循环的每一次迭代中,我都不能是reInitializing startMenu。

游戏::update()(调用main,inside event while循环)

代码语言:javascript
复制
void Game::update() {

switch(gameState)
 {
  case 0:
       runStartMenu();
       break;
  case *n*... //other game screens...
 }
}

然后我的绘图游戏::render()函数:(从main调用,inside event then循环调用)

代码语言:javascript
复制
Game::render()

  switch(gameState)
   {
    case 0:
       drawStartMenu();
       break;
    case *n*... //other game screens...
   }
  }

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-07-02 17:19:54

编辑:根据请求,允许在菜单运行时执行其他任务的后台执行

作为一般规则,您不应该在智能指针上下文之外操作原始newdelete运算符。对于您的用例,绝对可以使用静态分配,而动态分配并没有带来任何优势,因此我建议您以简单的方式设计它,如下所示:

代码语言:javascript
复制
StartMenu::choice_t choice;

Game::runStartMenu() {
    auto menuThread = std::thread([](){
        auto menu = StartMenu{/* options */};
        // for example :
        choice = menu.show(); 
    }); // the menu memory gets freed here 

    
    menuThread.join(); // wait for execution end

    // choice handling logic
} 

然后,调用者可以实现菜单选择逻辑并启动游戏!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62701617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档