|
|
|
push_back(new ... )
|
|||
|---|---|---|---|
|
#18+
делаю игрушку. всех игроков храню в списке std::list<player*>, где player базовый класс. От него наследуются human player и machine player. Нужно добавить игрока-компьютера вызовом метода add_machine_player() Ничего умнее вот этого пока не придумал Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 12:11 |
|
||
|
push_back(new ... )
|
|||
|---|---|---|---|
|
#18+
да вроде нормально. моло ли чего захочешь добавит в этот метод... а что за deleter? просто случайно в код попал или его присутствие необходимо для понимания нами ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 12:15 |
|
||
|
push_back(new ... )
|
|||
|---|---|---|---|
|
#18+
В принципе, еще неплохо бы проверять, что оператор new вернул не NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 12:21 |
|
||
|
push_back(new ... )
|
|||
|---|---|---|---|
|
#18+
roman10 В принципе, еще неплохо бы проверять, что оператор new вернул не NULL. вы о чем, товарисч???? Это вам не Си. New если будут какие то закавыки - не вернет NULL, он просто сгенерит исключение. Man555 имею некоторый опыт "общения" с современными движками-шутерами. Могу посоветовать две вещи: 1) Если ты будешь использовать клиент-серверную технологию, значит тебе придется между тачками рассылать snapshot-ы, и, кстати, обрабатывать их потери. так вот, snapshot это по сути пакет состояния игры(назовем это так). засунусть туда std::list тебе будет чертовски проблематично. Без преобразования в массив не обойтись. Поэтому рекомендую юзать std::vector. тем более вряд ли у вас игроков будет больше 1000. Кстати для этого дела во всех играх номаных есть параметр sv_max_clients (обычно колеблется в районе 32 или 64). Т.е. память для вектора можно будет резервировать заранее. 2) во избежании накладных расходов на удаление и вставку, у клиентов-игроков ставишь флажок active, вместо удаления просто сбрасывай этот флаг. Посик свободной позиции по 64 элементам массива отработает моментально. Кстати в кваковских двигах так и сделано. 3) я бы не стал сосздавать такой небезопасный тип хранящий ОБЫЧНЫЕ указатели, деструкторы по которым вызываются только в деструкторе контейнера. Лучше использовать для этого дела счетчик ссылок. Тогда другие ОПАСНЫЕ операции по контейнеру будут безопасны. даже те операции о которых не подозреваете. Для ваще случая я бы рекомендовал boost::shared_ptr - он все сделает в лучшем виде. Вам ничего не надо будет писать, только std::vector< shared_ptr<player> > саму библиотеку смотри на boost.org ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 13:01 |
|
||
|
push_back(new ... )
|
|||
|---|---|---|---|
|
#18+
авторЭто вам не Си. New если будут какие то закавыки - не вернет NULL, он просто сгенерит исключение Согласен. Просто, в VC наблюдается баг . Не знаю, исправили его или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 14:00 |
|
||
|
push_back(new ... )
|
|||
|---|---|---|---|
|
#18+
Ну может в MSVC 5 это и было я попробовал на своем NET 2003. Итак set_new_handler устанавливает, функцию которая вызывается если глобальный new вернул исключение. Пишем тест Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. пускаем. говорим отладчику замолчать и о чудо! bad_alloc вылетает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 15:01 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2033962]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
22ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 181ms |
| total: | 259ms |

| 0 / 0 |
