Это приемлемый способ управления ресурсами? - PullRequest
0 голосов
/ 18 апреля 2011

Чтобы управлять различными ресурсами в моей игре (растровые изображения шрифтов и т. Д.), Я хочу создать менеджеров, которые сопоставляют строки с любым ресурсом. И этот объект, когда выходит из области видимости, освобождает всю память, используемую ресурсами.

Таким образом, если вам нужен шрифт, вам нужно либо добавить его, либо запросить строку, указывающую его имя, и он вернет указатель на него. Таким образом, пользователь никогда не должен управлять какой-либо памятью.

Это хороший дизайн для маленькой видеоигры?

Спасибо

Ответы [ 4 ]

2 голосов
/ 18 апреля 2011

То, что вы описываете, это фабричный шаблон в сочетании с Smart Pointer / Scoped Pointer.

Это довольно разумно. Просто подумайте, действительно ли вам нужно использовать строку для идентификации ресурса. Перечисления может быть достаточно.

2 голосов
/ 18 апреля 2011

Здесь возникает проблема, если ваш менеджер возвращает обычные указатели - ресурсы будут зависать до тех пор, пока сам менеджер не будет уничтожен (что неэффективно, особенно для таких ресурсов, как растровые изображения), или пока вы не сделаете явный вызов менеджера, чтобы избавиться от него.из них, что может не произойти, если будут выброшены исключения.Для менеджера было бы лучше возвращать умные указатели некоторого вида, которые могут сообщить менеджеру, когда ресурс закончен.

0 голосов
/ 18 апреля 2011

Возможно, вы захотите рассмотреть boost :: intrusive_ptr , чтобы все ваши объекты были пересчитаны. В случае необходимости вы можете выполнить их ручную утилизацию из менеджера.

Конечно, вы можете написать свои собственные классы умных указателей или просто взять их у кого-то, у кого уже есть:
http://www.boost.org/doc/libs/1_46_1/libs/smart_ptr/smart_ptr.htm

0 голосов
/ 18 апреля 2011

Звучит как умный указатель , если он автоматически освобождает себя, когда выходит из области видимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...