我有一个游戏服务器。 它创建的实例数Game
,并把它们添加(或指向他们?有什么好?它有10个ints
等5个三分球,10个成员函数)的载体。 之后,一些事件发生的游戏如game_ends内。 在这个非常时刻的游戏应该从载体上删除...什么是实现这一目标的最佳途径?
我们是来这两种方法是:
创建一个观察者模式。 服务器将是一个观察者和游戏将派出一个事件来删除它。
设置游戏
ended
状态,而服务器不断地扫描矢量并删除游戏这是在ended
状态。
我有一个游戏服务器。 它创建的实例数Game
,并把它们添加(或指向他们?有什么好?它有10个ints
等5个三分球,10个成员函数)的载体。 之后,一些事件发生的游戏如game_ends内。 在这个非常时刻的游戏应该从载体上删除...什么是实现这一目标的最佳途径?
我们是来这两种方法是:
创建一个观察者模式。 服务器将是一个观察者和游戏将派出一个事件来删除它。
设置游戏ended
状态,而服务器不断地扫描矢量并删除游戏这是在ended
状态。
指针或实例
如果您使用创建一个指向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
元素可以以某种方式通知他们做了经理,但他们不应该删除自己,或者从集合中删除自己。
创建一个对象或指向对象的游戏?
是游戏对象大? 是否包含其他指针或指针文件,套接字或其他类似的东西?
如果答案要么那些是肯定的,那么你应该在新的游戏对象,并存储指向它。
如果您使用的观察员或不断扫描?
要回答这个更好,我需要更多地了解你的计划。 目前,它似乎是一个设计决定你更适合做。 如果你不断地扫描,您将需要旋转一个线程。 这可能不是你想要的。
我个人会用一个观察者模式。