Для первого вопроса используйте QPointer.
Что касается вашего второго вопроса,
Если я правильно понял, даже если вы отправляете myObject
, у вас все еще есть ссылка myObject
в классе, где вы отправляете сигнал. Тогда как это будет утечка памяти или оборванный указатель? Вы по-прежнему можете получить доступ к myObject
из созданного класса, не так ли?
Надеюсь понятно..
Редактировать :
Судя по вашим комментариям, вы освобождаете/удаляете объекты в слотах. Теперь я предполагаю, что ваша проблема заключается в том, что если слот (высвобождающий память) вызывается один раз, дважды или вообще не вызывается.
Вы можете использовать QPointer для этого. Из документации Qt,
Защищенные указатели (QPointer
) полезны, когда вам нужно сохранить указатель на QObject
, который принадлежит кому-то другому и, следовательно, может быть уничтожен, пока вы сохраняете на него ссылку. Вы можете безопасно проверить указатель на достоверность.
Пример из самой документации Qt,
QPointer<QLabel> label = new QLabel;
label->setText("&Status:");
...
if (label)
label->show();
объяснение продолжается так..
Если при этом удалить QLabel, переменная label будет содержать 0 вместо недопустимого адреса, и последняя строка никогда не будет выполнена. Здесь QLabel будет вашим MyClass
, а label — вашим myObject
. И прежде чем использовать его, проверьте на недействительность.
person
liaK
schedule
06.07.2010