Указатель на элемент в QList - PullRequest
1 голос
/ 09 марта 2019

У меня есть список списков контейнера этого типа:

QList< QList<UAVObject *> > objects;

По какой-то причине я хотел бы получить быстрый доступ к одному из внутренних списков. Могу ли я сохранить указатель на внутренний список? Например:

QList<UAVObject *>& ref = objects[0];
QList<UAVObject *>* pt = &ref;

Будет ли значение pt по-прежнему действительным для различных вызовов функций и оригинальных objects манипуляций? Предположим, что список objects будет добавлен, а не удален.

1 Ответ

2 голосов
/ 09 марта 2019

QList не основан на контейнере STL и не имеет ничего общего с std::list. Правила аннулирования, указанные для контейнеров STL, не применимы.

Согласно документации Qt (и, насколько я понимаю), он использует массив указателей на элементы, если только элемент не больше void* и не объявлен как movable (с Q_MOVABLE_TYPE).

В этом случае элемент непосредственно сохраняется в массиве, и ссылка будет недействительной, когда ваш список будет расти (массив указателей будет перераспределен).

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