Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка валидности указателя 
V
    Опции темы
Ober
Дата 27.3.2012, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Можно ли проверить выделена  под указатель память или нет ? Если удаление производится самостоятельно, то можно сделать ptr = 0 после удаления и потом сравнивать, а если в указателе установлен атрибут Qt::WA_DeleteOnClose, то как можно проверить выделена под него память или нет ?
Заранее спасибо.
PM MAIL   Вверх
borisbn
Дата 28.3.2012, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



http://stackoverflow.com/questions/4595675...ointer-is-valid
но, вообще-то, это - неправильное построение программы, если требуется такая проверка


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Ober
Дата 28.3.2012, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Цитата(borisbn @ 28.3.2012,  08:03)
но, вообще-то, это - неправильное построение программы, если требуется такая проверка

У меня из основного окна MainWindow вызываются дополнительные окна, память выделяется для одного общего указателя QWidget * и освобождается при закрытии этих окон, так же эти окна используют общие указатели QLineEdit, следовательно одновременный вызов нескольких дополнительных окон приводит к фатальным ошибкам. Как можно решить эту проблему ? 
Я думаю можно под каждое окно объявить свои собственные указатели либо сделать так , чтобы из основного окна MainWindow можно было одновременно вызывать не более одного дополнительного окна. Если это верно то как тогда можно ограничить количество дополнительных окон ?
PM MAIL   Вверх
math64
Дата 28.3.2012, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



У QObject есть сигнал destroyed(QObject*) - нужно коннектиться на него, чтобы узнать, когда объект будет удалён.
Глобальные указатели удобно хранить в классе Application.
Тогда, чтобы поазать MyDialog, можно вызвать Application::myDialog()->show();
В первый раз будет создан объект MyDialog, при последующих вызовах будет использоваться уже созданный.


PM   Вверх
Alexeis
Дата 28.3.2012, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 1
Всего: 459



Цитата(Ober @  28.3.2012,  10:50 Найти цитируемый пост)
У меня из основного окна MainWindow вызываются дополнительные окна, память выделяется для одного общего указателя QWidget * и освобождается при закрытии этих окон

  boost::shared_ptr решает задачу совместного владения. Когда ни один владелец больше не нуждается в объекте, то он уничтожается автоматически (счетчик ссылок обнулится). 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
EnergoHokum
Дата 28.3.2012, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: 2
Всего: 6



Цитата

boost::shared_ptr

Тогда лучше создавать объект в этом самом shared_ptr-е, а "следящие копии" делать weak_ptr-ом. При удалении "главного" объекта, завёрнутого в shared_ptr, все weak_ptr-ы, порождённые им, будут знать об этом (метод expired).
PM MAIL ICQ   Вверх
math64
Дата 28.3.2012, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



При использовании Qt вместо boost::shared_ptr (weak_ptr) для Qt-шных классов лучше использовать QSharedPointer и QWeakPointer соответственно.
PM   Вверх
Ober
Дата 28.3.2012, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Да, QSheredPointer  это то, что нужно, я не совсем разобрался как он работает, но он работает. При открытии второго окна, окно уже открытое просто автоматически закрывается. 
Спасибо за помощь!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0670 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.