Russian Qt Forum
Ноябрь 24, 2024, 04:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Существует ли объект? Возможно ли узнать имея указатель?  (Прочитано 4140 раз)
fear
Гость
« : Ноябрь 25, 2006, 16:45 »

Возможно ли отследить имеется ли объект, имея указатель?
Задача состоит в том, чтобы при удалении parent`а (o1), не выводить значения child`ов, объекты которых так же уничтожатся.

Единственный способ, которой приходит в голову, это инициализация всех указателей на child`ов нулём при удалении parent`а. Есть ли другой способ?

Код:
#include <QtCore/QCoreApplication>

#include <QObject>
#include <QTextStream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QObject *o1 = 0;
    o1 = new QObject;
    QObject *o2 = new QObject(o1);
    o1->setObjectName("object 1");
    o2->setObjectName("object 2");

    delete o1;
   
    QTextStream out(stdout);
    if(o1)
      out<<"Object 1 name:"<<o1->objectName()<<endl;
    if(o2)
      out<<"Object 2 name:"<<o2->objectName()<<endl;

    return 0;
}
Записан
Dendy
Гость
« Ответ #1 : Ноябрь 25, 2006, 19:25 »

QPointer тебе в помощь Веселый
Записан
fear
Гость
« Ответ #2 : Ноябрь 27, 2006, 01:47 »

Спасибо, то что нужно.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Ноябрь 27, 2006, 14:12 »

>>Возможно ли отследить имеется ли объект, имея указатель?
 
в нативном c++ я вижу 2 способа

1. после
delete p
ставить
p=NULL;

2. попробовать dinamic_cast<> должно вроде null вернуть
Записан
bigirbis
Гость
« Ответ #4 : Ноябрь 27, 2006, 16:02 »

Цитировать
попробовать dinamic_cast<> должно вроде null вернуть

тогда уж qobject_cast

А вообще, есть подозрение что приложение свалится при доступе к освобожденной памяти.
Записан
Dendy
Гость
« Ответ #5 : Ноябрь 27, 2006, 18:18 »

1. Интересно как ето вьІнайдёте все переменньІе в программе, указатели которьІх ссьІлаются на удаляемьІй обьект?

2. А что по вашему вернёт dynamic_cast<>, если подставить ему адрес памяти, заново вьІделенньІй после удаления? (Ето когда два new возвратят одно и то же значение.) Вернёт какую-то чушь. Не вариант вообще.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #6 : Ноябрь 29, 2006, 11:15 »

я насчет указателей стараюсь пользовать auto_ptr
а то так с осовобождением памяти иногда замудришь, особенно если eсxeption есть
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 22.