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