![]() |
|
![]() ![]() ![]() |
|
Ober |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 11.3.2011 Репутация: нет Всего: нет |
Можно ли проверить выделена под указатель память или нет ? Если удаление производится самостоятельно, то можно сделать ptr = 0 после удаления и потом сравнивать, а если в указателе установлен атрибут Qt::WA_DeleteOnClose, то как можно проверить выделена под него память или нет ?
Заранее спасибо. |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
http://stackoverflow.com/questions/4595675...ointer-is-valid
но, вообще-то, это - неправильное построение программы, если требуется такая проверка -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Ober |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 11.3.2011 Репутация: нет Всего: нет |
У меня из основного окна MainWindow вызываются дополнительные окна, память выделяется для одного общего указателя QWidget * и освобождается при закрытии этих окон, так же эти окна используют общие указатели QLineEdit, следовательно одновременный вызов нескольких дополнительных окон приводит к фатальным ошибкам. Как можно решить эту проблему ? Я думаю можно под каждое окно объявить свои собственные указатели либо сделать так , чтобы из основного окна MainWindow можно было одновременно вызывать не более одного дополнительного окна. Если это верно то как тогда можно ограничить количество дополнительных окон ? |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
У QObject есть сигнал destroyed(QObject*) - нужно коннектиться на него, чтобы узнать, когда объект будет удалён.
Глобальные указатели удобно хранить в классе Application. Тогда, чтобы поазать MyDialog, можно вызвать Application::myDialog()->show(); В первый раз будет создан объект MyDialog, при последующих вызовах будет использоваться уже созданный. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 1 Всего: 459 |
boost::shared_ptr решает задачу совместного владения. Когда ни один владелец больше не нуждается в объекте, то он уничтожается автоматически (счетчик ссылок обнулится). -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
EnergoHokum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: 2 Всего: 6 |
Тогда лучше создавать объект в этом самом shared_ptr-е, а "следящие копии" делать weak_ptr-ом. При удалении "главного" объекта, завёрнутого в shared_ptr, все weak_ptr-ы, порождённые им, будут знать об этом (метод expired). |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
При использовании Qt вместо boost::shared_ptr (weak_ptr) для Qt-шных классов лучше использовать QSharedPointer и QWeakPointer соответственно.
|
|||
|
||||
Ober |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 11.3.2011 Репутация: нет Всего: нет |
Да, QSheredPointer это то, что нужно, я не совсем разобрался как он работает, но он работает. При открытии второго окна, окно уже открытое просто автоматически закрывается.
Спасибо за помощь! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, 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. |