Обычно было бы плохой идеей попытаться перенести Symbian OS C ++ на стандарт C ++, не имея четкого понимания того, что делают идиомы Symbian.
Это вполне может быть один из таких проектов, гдеПравильно было бы переписать большую часть кода с нуля.Если вы едва знаете язык, на который вы нацелены, нет смысла вводить себя в заблуждение, полагая, что вы не будете делать ошибок, тратить время и выбрасывать новый код в любом случае.Это все часть обучения.
Механизм CleanupStack предназначен для того, чтобы помочь вам справиться со всем, что может пойти не так, как сбои питания и нехватка памяти.Технически, в наши дни он реализован как исключения C ++, но он охватывает больше, чем обычные случаи ошибок, которые обычно обрабатывает стандартный код C ++.
Дескрипторы (TDesc, TBuf и HBuf все принадлежат иерархии классов дескрипторов) и шаблоны (массивы, очереди, списки ...) предшествуют их эквивалентам в стандартном C ++, имея дело с такими проблемами, как CleanupStack, стандарты кодирования, управление памятью и целостность ...
Соответствующий плагин, если вы хотите узнать об этом: Быстрые рецепты на Symbian OS - это недавняя попытка объяснить все это на как можно меньшем количестве страниц.
Вы также должны обязательно зайти на сайт Foundation , чтобы начать работу.
Предполагается, что классы с префиксом T сами по себе достаточно малы, чтобы их можно было размещать в стеке.
Классы дескрипторов с суффиксом C подразумевают неизменяемость (обычно изменяемый дескриптороднако, из них можно создать).
HBufC - почти единственный префикс класса SymbianОбозначается буквой H. Он всегда должен быть размещен в куче.
Метод с суффиксом C добавит объект в CleanupStack при успешном возврате (обычно это объект, который он возвращает).Это зависит от вызывающего кода для Pop этого объекта.
Классы с префиксом R предназначены для размещения в стеке, но управляют своими собственными ресурсами на основе кучи.У них обычно есть какой-то метод Close (), который нужно вызывать перед их деструктором.
Типичный способ разобраться в различиях между коллекцией объектов и коллекцией указателей на объект - это кто владеет объектамив коллекции.Либо коллекция владеет объектами при их добавлении и теряет их при удалении (и, следовательно, отвечает за удаление каждого объекта, который все еще содержится, когда она сама уничтожена), либо коллекция не передает права собственности, и что-то еще должно обеспечивать объектыСодержимое останется действительным в течение всего времени жизни коллекции.
Еще один способ думать о коллекциях - это то, сколько копий объектов вы хотите получить при добавлении / получении объектов в / из коллекции.
Классы дескрипторов и коллекций Symbian предназначены для охвата всех этих различных способов использования памяти и позволяют вам выбрать тот, который вам нужен, исходя из того, что вы хотите сделать.
Конечно, сделать это правильно непросто, но вот какэта операционная система работает.