Да, это «безопасно», если вы можете гарантировать, что указатель останется действительным, когда вы получите к нему доступ.
В этом простом примере это выглядит так. Я вижу потенциальную проблему в вашем коде, которая может быть причиной вашего случайного cra sh:
Объекты, управляемые событиями, могут использоваться только в одном потоке. В частности, это относится к механизму таймера и сетевому модулю. Например, вы не можете запустить таймер или подключить сокет к потоку, который не является потоком объекта.
из https://doc.qt.io/qt-5/threads-qobject.html абзац Повторный вход объекта.
Это то, что вы делаете: объект отправителя создается в главном потоке и включается, поэтому таймер запускается в этом потоке, а затем перемещается в рабочий поток.
Другое дело, что я не на 100% Уверен в себе: вы выполняете соединение перед перемещением объекта в другой поток. По умолчанию, если ничего не сказано о соединении, когда два объекта находятся в одном потоке, это прямое соединение, а когда объект находится в другом потоке, это, очевидно, соединение в очереди. Я не знаю, в какой степени Qt устойчив к изменению типа соединения при перемещении объекта, но я бы предпочел сначала переместить объект, а затем подключить его.