C ++管理对象(C++ managing objects)

2019-09-21 13:53发布

我有一个游戏服务器。 它创建的实例数Game ,并把它们添加(或指向他们?有什么好?它有10个ints等5个三分球,10个成员函数)的载体。 之后,一些事件发生的游戏如game_ends内。 在这个非常时刻的游戏应该从载体上删除...什么是实现这一目标的最佳途径?

我们是来这两种方法是:

  1. 创建一个观察者模式。 服务器将是一个观察者和游戏将派出一个事件来删除它。

  2. 设置游戏ended状态,而服务器不断地扫描矢量并删除游戏这是在ended状态。

Answer 1:

指针或实例

如果您使用创建一个指向new你一定要记住将其删除。 如果您使用的是真正的实例,请确保你定义一个copy constructor ,因为std::vector的副本往往你的对象。

您可以使用boost::sharedPointer<Game> 。 不要使用std::auto_ptr<Game>std::vector

实现的选项 ,我会考虑以下几点:

观察者模式是优雅的,但究竟有多少次将它叫什么名字? 从载体删除会为O(n),因为你必须找到它,然后erase它。

如果你知道你将在最大的游戏,说上一分钟,并装入内存,你可以拥有每分钟它遍历该载体的线程,并删除任何ended比赛。

如果内存是至关重要的,你必须使用观察者模式。 如果你有很多的游戏,每场比赛的唯一的标识符,可以考虑std::map ,而不是vector ,然后用观察者模式从地图上,这将是删除O(log(n))



Answer 2:

你的应用程序的性质不谈,如果按价值,而不是指向对象添加到您的载体,一旦被从载体上删除,你会不会担心自己删除它们。 如果你有动态创建的对象,并将它们添加到您的向量作为指针,你将负责其删除。



Answer 3:

一个对象真的不应该确定自己的寿命。 你或许应该有某种管理该公司拥有的容器 ,当一个对象需要去哪些可以决定上下文。 实际的Game元素可以以某种方式通知他们做了经理,但他们不应该删除自己,或者从集合中删除自己。



Answer 4:

创建一个对象或指向对象的游戏?

是游戏对象大? 是否包含其他指针或指针文件,套接字或其他类似的东西?

如果答案要么那些是肯定的,那么你应该在新的游戏对象,并存储指向它。

如果您使用的观察员或不断扫描?

要回答这个更好,我需要更多地了解你的计划。 目前,它似乎是一个设计决定你更适合做。 如果你不断地扫描,您将需要旋转一个线程。 这可能不是你想要的。

我个人会用一个观察者模式。



文章来源: C++ managing objects