![]() |
|
![]() ![]() ![]() |
|
gpepsi |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
Наследника QObject нужно было положить в QMap
Этого не удалось сделать, т.к. у QObject закрыт оператор присваивания. Первое что пришло в голову - положить QSharedPointer
у QSharedPointer есть конструктор по умолчанию, что привело в
создание пустого указателя. Это недопустимо, т.к. логикой у меня является создание Some* при первом обращении, а не пустого указателя. Можно ли запретить создания пустого указателя ? З.Ы. А может для этого есть типа QSharedMap (ну как boost::ptr_map) ? P.P.S А для чего нужен QSharedData ? Типа Shared Memory ? |
||||||
|
|||||||
math64 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
А не проще ли использовать
Добавлено через 8 минут и 23 секунды или
Это сообщение отредактировал(а) math64 - 3.11.2011, 21:38 |
||||
|
|||||
gpepsi |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
math64, я просто считаю, что для smart_pointer конструктор по-умолчанию бессмысленна вещь
![]() |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Для хранения объектов, производных от QObject, есть QPointer - но у него тоже есть конструктор по умолчанию, и у него другое назначение - при удалении объекта он будет ссылаться на NULL. и не будет удалять объект в своём деструкторе.
QSharedPointer тоже имеет конструктор по умолчанию, но имеет также счётчик использования, и в своём деструкторе будет удалять объект при обнулении счётчика. QWeakPointer хранит слабую ссылки на QSharedPointer, которая обнуляется, когда удаляется QSharedPointer. QSharedDataPointer хранит объекты, производные от QSharedData. QSharedMap в Qt4.5, которая у меня стоит на компьютере, нет. Так что ничего, имеющегося в Qt, напрямую тебе не подходит. Можешь использовть контейнеры из stl или boost - но я думаю, там всё аналогично. Самое простое - сделать свою обёртку вокруг QMap<int,Some*> или map<int,Some*> |
|||
|
||||
spyswamp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Кстати, из всех смарт поинтеров в Qt только QScopedPointer не делает disconnect() или остальные тоже?
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
gpepsi |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
хороший вопрос а зачем он ? Лишь для копирования ?
c подсчетом ссылок понятно - boost::shared_ptr понятно - boost::weak_ptr не понятно для чего QSharedData. смотрел исходники - он тоже имеет подсчет ссылок То есть не понятно для чего QSharedData и QPointer жаль Это сообщение отредактировал(а) gpepsi - 4.11.2011, 16:01 |
||||
|
|||||
_GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
Основная задача:
Минимальное решение:
Использование Q<x>Pointer - по мере необходимости в зависимости от задачи. P.S. "... не ссы, Димон, я так сто раз делал." =) -------------------- Дорогу осилит идущий |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |