其他分享
首页 > 其他分享> > C管理对象

C管理对象

作者:互联网

我有一个游戏服务器.它会创建Game的多个实例并将它们添加(或者指向它们的指针?它有什么更好的?它有10个整数和5个其他指针,10个成员函数)到向量.之后,一些事件发生在游戏内部e. G. game_ends.在这个时刻,游戏应该从矢量中删除……实现它的最佳方法是什么?

我们遇到的两种方式是:

>创建一个观察者模式.服务器将是一个观察者,游戏将调度一个事件来删除它.
>将游戏设置为已结束状态,同时服务器不断扫描向量并删除处于已结束状态的游戏.

解决方法:

指针或实例

如果使用new创建指针,则必须记住删除它.如果您使用的是实例,请确保定义了复制构造函数,因为std :: vector经常复制对象.

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

从实现选项中我会考虑以下内容:

观察者模式很优雅,但会被称为多少次?从向量中删除将是O(n),因为您必须找到它然后将其删除.

如果你知道你将拥有的最大游戏,比如一分钟,并且适合内存,你可以拥有一个每分钟遍历向量的线程并删除任何已结束的游戏.

如果内存很关键,则必须使用观察者模式.如果你有很多游戏,并且每个游戏都有一个唯一的标识符,你可以考虑使用std :: map而不是vector,然后使用观察者模式从地图中删除O(log(n))

标签:c,class,object,delete-operator
来源: https://codeday.me/bug/20190729/1571640.html