gpt4 book ai didi

C++ 管理对象

转载 作者:太空狗 更新时间:2023-10-29 20:15:42 25 4
gpt4 key购买 nike

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

我们的两种方式是:

  1. 创建观察者模式。服务器将成为观察者,游戏将发送事件以将其删除。

  2. 将游戏设置为ended状态,同时服务器不断扫描 vector 并删除处于ended状态的游戏。

最佳答案

指针或实例

如果您使用 new 创建一个指针你必须记得删除它。如果您使用的是真实实例,请确保定义一个 copy constructor ,因为 std::vector经常复制你的对象。

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

根据实现方案,我会考虑以下内容:

观察者模式很优雅,但是它会被调用多少次呢?从 vector 中删除将是 O(n) 因为你必须找到它然后 erase它。

如果你知道你将玩的最大游戏,比如一分钟,并且适合内存,你可以有一个线程每分钟迭代 vector 并删除任何 ended游戏。

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

关于C++ 管理对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12100816/

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