| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Проверка валидности указателя |
| Автор: Ober 27.3.2012, 18:47 |
| Можно ли проверить выделена под указатель память или нет ? Если удаление производится самостоятельно, то можно сделать ptr = 0 после удаления и потом сравнивать, а если в указателе установлен атрибут Qt::WA_DeleteOnClose, то как можно проверить выделена под него память или нет ? Заранее спасибо. |
| Автор: borisbn 28.3.2012, 08:03 |
| http://stackoverflow.com/questions/4595675/determining-whether-pointer-is-valid но, вообще-то, это - неправильное построение программы, если требуется такая проверка |
| Автор: Ober 28.3.2012, 09:50 | ||
У меня из основного окна MainWindow вызываются дополнительные окна, память выделяется для одного общего указателя QWidget * и освобождается при закрытии этих окон, так же эти окна используют общие указатели QLineEdit, следовательно одновременный вызов нескольких дополнительных окон приводит к фатальным ошибкам. Как можно решить эту проблему ? Я думаю можно под каждое окно объявить свои собственные указатели либо сделать так , чтобы из основного окна MainWindow можно было одновременно вызывать не более одного дополнительного окна. Если это верно то как тогда можно ограничить количество дополнительных окон ? |
| Автор: math64 28.3.2012, 11:00 |
| У QObject есть сигнал destroyed(QObject*) - нужно коннектиться на него, чтобы узнать, когда объект будет удалён. Глобальные указатели удобно хранить в классе Application. Тогда, чтобы поазать MyDialog, можно вызвать Application::myDialog()->show(); В первый раз будет создан объект MyDialog, при последующих вызовах будет использоваться уже созданный. |
| Автор: EnergoHokum 28.3.2012, 13:37 | ||
Тогда лучше создавать объект в этом самом shared_ptr-е, а "следящие копии" делать weak_ptr-ом. При удалении "главного" объекта, завёрнутого в shared_ptr, все weak_ptr-ы, порождённые им, будут знать об этом (метод expired). |
| Автор: math64 28.3.2012, 16:57 |
| При использовании Qt вместо boost::shared_ptr (weak_ptr) для Qt-шных классов лучше использовать QSharedPointer и QWeakPointer соответственно. |
| Автор: Ober 28.3.2012, 21:52 |
| Да, QSheredPointer это то, что нужно, я не совсем разобрался как он работает, но он работает. При открытии второго окна, окно уже открытое просто автоматически закрывается. Спасибо за помощь! |