Выборки и БД на QList |
Здравствуйте, гость ( Вход | Регистрация )
Выборки и БД на QList |
NordWest |
23.9.2010, 9:17
Сообщение
#1
|
Студент Группа: Участник Сообщений: 86 Регистрация: 26.11.2008 Пользователь №: 433 Спасибо сказали: 1 раз(а) Репутация: 0 |
Здравствуйте.
Работаю с чем-то вроде БД, состоящей из QList списком указателей на слруктуры. QList <myStruct*> например. Т.е. первоначально загружаю такую таблицу в один список из файла. Затем делаю различные выборки с созданием других списков из отдельных элементов первого. При этом, найдя в основном списке нужную запись, делаю примерно так:
Т.е. я надеюсь, что сами объекты будут в памяти в единственном экземпляре, а указатели на них в различных комбинациях располагаться по выборкам. Но похоже целостность данных в программе нарушается, возможно из-за той операции. Что конкретно происходит при таком заполнении выборок и безопасно ли это для исходной таблицы? |
|
|
kwisp |
23.9.2010, 9:38
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
const T& at(int) const; - возвращает константную ссылку и сама константная - т.е гарантированно не изменяет членов класса QList. в случает выхода за границы списка по-моему ASSERT в дебуг вылетит.
void operator<<(const T&) - принимает константную ссылку и размещает копию объекта в списке. по идее целостность данных не нарушается. |
|
|
NordWest |
23.9.2010, 9:52
Сообщение
#3
|
Студент Группа: Участник Сообщений: 86 Регистрация: 26.11.2008 Пользователь №: 433 Спасибо сказали: 1 раз(а) Репутация: 0 |
Спасибо! Этот вариант значит пока исключу.
|
|
|
Sokoloff |
23.9.2010, 9:57
Сообщение
#4
|
Участник Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: 11 |
Мне кажется, эти строки протеворечат друг другу:
void operator<<(const T&) - принимает константную ссылку и размещает копию объекта в списке. Т.е. я надеюсь, что сами объекты будут в памяти в единственном экземпляре, а указатели на них в различных комбинациях располагаться по выборкам. Возможно поэтому целостность данных и нарушается, если под целостностью понимать непротиворечивость данных. |
|
|
kwisp |
23.9.2010, 9:59
Сообщение
#5
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
Мне кажется, эти строки протеворечат друг другу: думаю не противоречат. потому что контейнеры по идее работают с копиями обЪектов. в данном случае с копией указателя ничего сверхЪестественного.... принимает константную(потому что не изменяет копируемый обЪект) ссылку(потому что она в общем случае быстрее передается в функцию исключая множестенное копирование) |
|
|
NordWest |
23.9.2010, 10:17
Сообщение
#6
|
Студент Группа: Участник Сообщений: 86 Регистрация: 26.11.2008 Пользователь №: 433 Спасибо сказали: 1 раз(а) Репутация: 0 |
Ну да, самих указателей может быть сколько угодно. Главное, чтобы указывали они туда куда надо и не затирались.
|
|
|
Litkevich Yuriy |
23.9.2010, 13:22
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
может быть будет надёжнее использовать классы типа QPointer, если объекты унаследованы от QObject.
Т.к. имея "пачку указателей" со временем станет сложно следить за тем, чтобы сначала избавится от всех указателей и только потом от самого объекта |
|
|
NordWest |
23.9.2010, 19:55
Сообщение
#8
|
Студент Группа: Участник Сообщений: 86 Регистрация: 26.11.2008 Пользователь №: 433 Спасибо сказали: 1 раз(а) Репутация: 0 |
Цитата Т.к. имея "пачку указателей" со временем станет сложно следить за тем, чтобы сначала избавится от всех указателей и только потом от самого объекта Да, вот что интересно. Если я в одной из выборок удаляю элемент removeAt(i), то удалится объект и исходная таблица потеряет элемент? Цитата может быть будет надёжнее использовать классы типа QPointer, если объекты унаследованы от QObject. Нет, структуры не унаследованы. Ещё и со списками других структур внутри. |
|
|
Litkevich Yuriy |
24.9.2010, 10:00
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Текстовая версия | Сейчас: 20.12.2024, 20:13 |