Russian Qt Forum

Qt => Общие вопросы => Тема начата: fear от Ноябрь 25, 2006, 16:45



Название: Существует ли объект? Возможно ли узнать имея указатель?
Отправлено: 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 от Ноябрь 25, 2006, 19:25
QPointer тебе в помощь :D


Название: Существует ли объект? Возможно ли узнать имея указатель?
Отправлено: fear от Ноябрь 27, 2006, 01:47
Спасибо, то что нужно.


Название: Существует ли объект? Возможно ли узнать имея указатель?
Отправлено: Admin от Ноябрь 27, 2006, 14:12
>>Возможно ли отследить имеется ли объект, имея указатель?
 
в нативном c++ я вижу 2 способа

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

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


Название: Существует ли объект? Возможно ли узнать имея указатель?
Отправлено: bigirbis от Ноябрь 27, 2006, 16:02
Цитировать
попробовать dinamic_cast<> должно вроде null вернуть

тогда уж qobject_cast

А вообще, есть подозрение что приложение свалится при доступе к освобожденной памяти.


Название: Существует ли объект? Возможно ли узнать имея указатель?
Отправлено: Dendy от Ноябрь 27, 2006, 18:18
1. Интересно как ето вьІнайдёте все переменньІе в программе, указатели которьІх ссьІлаются на удаляемьІй обьект?

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


Название: Существует ли объект? Возможно ли узнать имея указатель?
Отправлено: Admin от Ноябрь 29, 2006, 11:15
я насчет указателей стараюсь пользовать auto_ptr
а то так с осовобождением памяти иногда замудришь, особенно если eсxeption есть