C++管理对象
C++ managing objects
我有一个游戏服务器。它创建了许多Game
的实例,并将它们(或者指向它们的指针?更好的是什么?它有10个ints
和5个其他指针,10个成员函数)添加到向量中。之后游戏内部会发生一些事件,例如game_ends。此时此刻,游戏应该从矢量中删除。。。实现这一目标的最佳方式是什么?
我们有两种方法:
-
创建一个观察者模式。服务器将是一个观察者,游戏将调度一个事件来删除它
-
将游戏设置为CCD_ 3状态,同时服务器不断扫描矢量并删除处于CCD_。
指针或实例
如果你使用new
创建指针,你必须记住删除它。如果你使用的是一个真实的实例,请确保你定义了一个copy constructor
,因为std::vector
经常复制你的对象。
您可以使用boost::sharedPointer<Game>
。不要将std::auto_ptr<Game>
与std::vector
一起使用
根据实施选项,我将考虑以下内容:
观察者模式是优雅的,但它会被称为多少次?从矢量中删除将是O(n),因为你必须找到它,然后erase
它。
如果你知道你将在一分钟内拥有的最大游戏数,并且适合记忆,那么你只需要有一个线程,它每分钟迭代一次向量,并删除任何ended
游戏。
如果内存很关键,则必须使用观察者模式。如果你有很多游戏,并且每个游戏都有一个唯一的标识符,你可以考虑std::map
而不是vector
,然后使用观察者模式从地图中删除O(log(n))
撇开应用程序的性质不谈,如果通过值而不是指针将对象添加到向量中,那么一旦从向量中删除了对象,就不必担心自己会删除它们。如果你必须动态地创建对象,并将它们作为指针添加到向量中,你将负责删除它们。
对象不应该真正确定自己的生存期。您可能应该有某种管理上下文,它拥有容器,并可以决定对象何时需要离开。实际的Game
元素可能会以某种方式通知管理器它们已经完成,但它们不应该删除自己,也不应该从集合中删除自己。
创建一个对象或指向对象的指针游戏?
游戏物体大吗?它是否包含其他指针或指向文件、套接字或其他类似事物的指针?
如果答案是肯定的,那么你应该新建游戏对象,并存储一个指向它的指针
你应该使用观察者还是经常扫描?
为了更好地回答这个问题,我需要更多地了解你的项目。目前,这似乎是一个你更适合做的设计决定。如果你不断地扫描,你将需要旋转线程。这可能不是你想要的。
我个人会使用观察者模式。
- 我们可以通过 IPC 传递具有动态管理成员的类对象吗?
- 创建跨平台 C++ 触摸管理器.在 c++ 中传递 Objective-c 对象涉及代码
- 管理器类和对象类之间的通信
- 是否可以在专用内存空间中分配一个为提升管理共享内存而创建的对象
- 如何将指针从unique_ptr传递到另一个对象并管理寿命
- 模板对象管理器,参数不正确
- C++ 对象内存管理
- 编写安全包装类以管理用户定义对象的指针
- 如何管理和处理仅在堆上创建的类的对象
- 一类应管理其实例化对象
- 使用GDI+删除位图和CLSID对象时,C++内存管理失败
- 学生成绩管理系统 在C++中,表达式必须具有指向对象类型的指针
- 检查派生自enable_shared_from_this的对象是否由shared_ptr管理?
- C 在具有不同对象类型的容器中管理ifstream
- 类对象也管理树结构
- 使用 std::unique_ptr 管理 COM 对象
- 公开对象管理器对象的可接受方法?
- Cocos2d-x对象管理与多个场景和层
- c++中的COM对象管理
- 对象管理——容器或工厂