gpt4 book ai didi

C++:不确定类 - 类管理器关系

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:35:28 26 4
gpt4 key购买 nike

在我的项目中,我有一系列类,出于特定原因,它们的实例由某个管理器类管理。

例子是:

CSound - Abstracts a single sound

CSoundManager - Friend of CSound, provides factory methods for creating CSound instances, mixes active sounds together

还有:CFont、CFontManager(用于按名称访问字体)、CSprite、CSpriteManager(用于绘制每一帧),等等。

这里是我的第一个问题:

  • 我正在做的是一个特定的命名设计模式吗?
  • 在大多数情况下,无论出于何种原因,这都是一个坏主意吗?如果是,为什么?

然后,我问自己:

  • 应该如何创建和销毁对象?我应该允许在堆栈上或直接使用 new 创建它们,还是只允许通过相应管理器类的方法创建它们?

(也用于销毁:delete myFont;FontManager.DestroyFont( myFont );)

最佳答案

听起来你可能违反了 The Single Responsibility Principle (SRP)原则。

CSoundManager 类是负责创建和管理CSound 对象的生命周期,还是负责将事件声音混合在一起?名字可以告诉你很多,而“经理”可以有太多的理解......

通常,如果您希望这些 Manager 类处理对象的生命周期,那么它们很可能是实例化这些对象(即对象中的私有(private) ctors)的唯一方法。查看Factory Design Pattern ,尽管您的实现有点不同。

如果您这样做,则客户端代码应该永远不会调用newdelete。手动调用 delete 容易出错,应避免使用 RAII 等惯用语。 .在这种特殊情况下,Manager 类应该管理对象的生命周期,因此 delete 永远不会出现在客户端代码中。

关于C++:不确定类 - 类管理器关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5236452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com