加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C:在类中使用静态容器来包含指向其所有对象的指针以便于访问是

发布时间:2020-12-16 09:51:53 所属栏目:百科 来源:网络整理
导读:我想知道在类中有一个静态容器来存储类对象的所有指针是不好的做法,这样它们都可以被程序的基类轻松访问.这是一个游戏,我在sdltutorials dot com上看到它,我发现它非常有用.它会让我有一个非常整洁的游戏结构,我真的没有看到这样的缺点,但我知道我必须小心“
我想知道在类中有一个静态容器来存储类对象的所有指针是不好的做法,这样它们都可以被程序的基类轻松访问.这是一个游戏,我在sdltutorials dot com上看到它,我发现它非常有用.它会让我有一个非常整洁的游戏结构,我真的没有看到这样的缺点,但我知道我必须小心“全球”访问,也许有一个负面影响,我看不到正确现在.

这是上下文/示例.游戏有一个基类,有基本方法,如Loop(),Render(),PlayAudio(),CleanMemory().我们的想法是让单个对象在base方法中执行相同的方法.伪代码示例:

Game::Render() {

  for (iterate all enemies in static container) {

     current_enemy::Render();
  }
}

可以肯定的是,类中的静态成员将如下所示:

static std::vector<Enemy*>    EnemyList;

所以这样,当你的游戏执行基础Render()方法时,你可以迭代敌人的类静态容器中的所有敌人并执行它们各自的Render()方法,然后对环境对象执行相同的操作,那么对于玩家等

我想确保我知道如果我选择这种方法来构建我的游戏可能遇到的任何缺点/复杂/限制,因为我现在没有看到任何东西,但我知道必须小心静态和全球的东西.

非常感谢你花时间陪伴.

解决方法

它当然很方便,但是静态变量或Singleton只不过是全局变量;并且全局变量有缺点:

>函数的依赖关系变得不清楚:它依赖于哪个全局?
>函数的重新入侵会受到影响:如果current_enemy.render()意外调用了Game :: Render(),该怎么办?这是一次无限的递归!
>除非进行适当的同步,否则函数的线程安全性会受到影响,在这种情况下,对全局变量的序列化访问会降低并发代码的性能(因为Amdahl’s Law)

在任何需要的地方明确地传递对游戏实例的引用可能看起来很痛苦和毫无意义,但是它留下了可以遵循的明确的依赖路径,并且随着软件的增长,您将欣赏显性.

当然,关于将程序转换为具有两个Game实例,还有很多要说的.虽然在这种精确的情况下看起来似乎有些不协调,但总的来说,不要认为将来永远不会有必要,因为我们不是神谕.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读