Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выборки и БД на QList
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
NordWest
Здравствуйте.
Работаю с чем-то вроде БД, состоящей из QList списком указателей на слруктуры. QList <myStruct*> например. Т.е. первоначально загружаю такую таблицу в один список из файла. Затем делаю различные выборки с созданием других списков из отдельных элементов первого. При этом, найдя в основном списке нужную запись, делаю примерно так:
selList << origList.at(i)

Т.е. я надеюсь, что сами объекты будут в памяти в единственном экземпляре, а указатели на них в различных комбинациях располагаться по выборкам. Но похоже целостность данных в программе нарушается, возможно из-за той операции. Что конкретно происходит при таком заполнении выборок и безопасно ли это для исходной таблицы?
kwisp
const T& at(int) const; - возвращает константную ссылку и сама константная - т.е гарантированно не изменяет членов класса QList. в случает выхода за границы списка по-моему ASSERT в дебуг вылетит.
void operator<<(const T&) - принимает константную ссылку и размещает копию объекта в списке.
по идее целостность данных не нарушается.
NordWest
Спасибо! Этот вариант значит пока исключу.
Sokoloff
Мне кажется, эти строки протеворечат друг другу:
Цитата(kwisp @ 23.9.2010, 10:38) *
void operator<<(const T&) - принимает константную ссылку и размещает копию объекта в списке.

Цитата(NordWest @ 23.9.2010, 10:17) *
Т.е. я надеюсь, что сами объекты будут в памяти в единственном экземпляре, а указатели на них в различных комбинациях располагаться по выборкам.


Возможно поэтому целостность данных и нарушается, если под целостностью понимать непротиворечивость данных.
kwisp
Цитата(Sokoloff @ 23.9.2010, 10:57) *
Мне кажется, эти строки протеворечат друг другу:

думаю не противоречат.
потому что контейнеры по идее работают с копиями обЪектов. в данном случае с копией указателя ничего сверхЪестественного....
принимает константную(потому что не изменяет копируемый обЪект) ссылку(потому что она в общем случае быстрее передается в функцию исключая множестенное копирование)
NordWest
Ну да, самих указателей может быть сколько угодно. Главное, чтобы указывали они туда куда надо и не затирались.
Litkevich Yuriy
может быть будет надёжнее использовать классы типа QPointer, если объекты унаследованы от QObject.
Т.к. имея "пачку указателей" со временем станет сложно следить за тем, чтобы сначала избавится от всех указателей и только потом от самого объекта
NordWest
Цитата
Т.к. имея "пачку указателей" со временем станет сложно следить за тем, чтобы сначала избавится от всех указателей и только потом от самого объекта

Да, вот что интересно. Если я в одной из выборок удаляю элемент removeAt(i), то удалится объект и исходная таблица потеряет элемент?


Цитата
может быть будет надёжнее использовать классы типа QPointer, если объекты унаследованы от QObject.

Нет, структуры не унаследованы. Ещё и со списками других структур внутри.
Litkevich Yuriy
Цитата(NordWest @ 23.9.2010, 23:55) *
то удалится объект и исходная таблица потеряет элемент?
если ты хранишь указатели, то объект не удалится, удалится только указатель
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.