Я начинаю разрабатывать графический движок только для практических целей. Одним из первых возникших вопросов является использование ручек или интеллектуальных указателей для обращения к экземплярам класса.Ручки против умных указателей. Что использовать?
С моей точки зрения:
Интеллектуальных указателями плюсов: созданное под спросом, они не имеют проблем становления устаревших указателей; cons: поскольку они находятся в связанном списке, поиск указателя - это операция O (n).
Ручки профи: поиск O (1), перемещение объекта O (1); cons: может стать устаревшими указателями, создание нового дескриптора заставляет систему проверять первую запись NULL в таблице дескрипторов.
Какой из них выбрать? Пожалуйста, объясните свой выбор.
Редакция:
Я хочу уточнить некоторые моменты, после того, как ваши комментариев и ответов.
Я не имею в виду, что умные указатели являются связанным списком в виде «представлены связанным с STL списком». Я имею в виду, что они ведут себя как связанный список (если вы перемещаете один объект из одного блока памяти в другой, вам нужно перебрать полный список интеллектуальных указателей для правильного обновления всех ссылок на этот объект - это можно сделать с помощью связанный список -).
И я не имею в виду ручки точно как непрозрачные указатели или указатель на модели реализации. Я имею в виду наличие глобальной таблицы дескрипторов (массив указателей), поэтому, когда я запрашиваю объект, я получаю разыменованный экземпляр, содержащий индекс в этой таблице, где можно найти фактический указатель на объект. Поэтому, если я перемещаю объект из одного блока в другой, просто обновляя запись указателя в таблице дескриптора, я получаю все указатели, автоматически обновляемые одновременно.
Можете ли вы подробно остановиться на том, что именно вы имеете в виду, когда используете термин «ручка»? –
Кроме того, что именно вы подразумеваете под «поиском указателя», и почему вы говорите, что умные указатели хранятся в связанном списке? – interjay
@davidcm: Обычно 'handle' означает непрозрачную сущность (возможно, указатель), которая используется как идентификатор после первого начального вызова, чтобы открыть устройство или файл и т. Д. Не уверен, что за« дескриптор »вы имеете в виду Вот. –