Название: QList Отправлено: Primordial от Июль 09, 2012, 22:52 Возник небольшой вопросец по использованию списков. Пусть есть какой-нибудь класс, например:
Код: class MyClass Пример использования с QList: Код: QList<MyClass> listMyClass; Название: Re: QList Отправлено: alexis031182 от Июль 09, 2012, 23:28 В обоих случаях.
Название: Re: QList Отправлено: m_ax от Июль 10, 2012, 07:33 Нет, полный бред(
Особенно вот этот фрагмент, меня веселит: Код
Можно, например, сделать так: Код
Но listMyClassP придётся в любом случае чистить руками. Например так: Код
Название: Re: QList Отправлено: mutineer от Июль 10, 2012, 10:41 Код: void AddToListB(float x, float y, float z) Это чушь и работает только чудом: myClassInstance удаляется при выходе из функции AddToListB и лист получает указатель, который указывает в стек туда, где был объект, а сейчас уже может быть что угодно Название: Re: QList Отправлено: Igors от Июль 10, 2012, 12:30 Наверное человек хочет сделать 2 QList - в одном сами данные, в другом указатели на них. Тогда так
Код Т.е. в контейнер указателей нужно помещать адрес элемента уже занесенного в контейнер значений, Теперь если мы добавляем элементы адреса не меняются. Это будет работать если sizeof(myClassInstance) > sizeof(void *) Примечания: 1) Хотя дословный перевод List = список, но по существу QList массив, а совсем не список. 2) Хранение простых структур как (x, y, z) в QList не запрещено но использует больше памяти чем QVector. Обычно выбор контейнера-массива определяется тем хотим ли мы иметь неизменный адрес элемента. Если да - QList, иначе QVector Название: Re: QList Отправлено: CuteBunny от Июль 10, 2012, 15:53 Либо как вариант использовать умные указатели:
Код
Название: Re: QList Отправлено: Igors от Июль 10, 2012, 19:48 Хотя человек спрашивал не об этом, но все же всегда полезно ну хотя бы "обращать внимание" на то а что из себя представляет элемент данных. Напр помещать в QList элемент (x, y, z) уже не очень хорошо, а "умный" указатель становится явно глупым будучи накрученным на каждую точку. Стандартные get/set также работают в минус если структура слишком мала и/или слишком конкретна как эта (x, y, z)
|