2013-06-07 2 views
1

Вот мой пример квартой оператора соединенияжизни объекта, связанное с сигналом

connect(pHttpFetch, SIGNAL(Fetched(QByteArray)), this, SLOT(PrintData(QByteArray))); 

Здесь сигнал первого объекта подключен к пазу призыва (что делает вызов на соединении) объект.

У меня есть следующие вещи

  • Первый объект является локальным объектом. Объект убивается, когда управление выходит за рамки.
  • Вызывающий объект останется в памяти всей памяти приложения.

Как мне не нужен первый объект, хорошо ли это сделать его локальным объектом? (Я предполагаю, что Qt волшебным образом сохраняет объект в памяти)

Должен ли я сделать общий указатель на объект. Уничтожит объект, если это не требуется?

ответ

3

Согласно Qt documentation

Всем сигналов к и от объекта, автоматически отключается, и все ожидающие Отправленные события для объекта удаляются из очереди событий.

И нет, Qt не «магически» сохраняет объект в памяти.

Объект, который больше не существует, не может отправлять сигналы. Вы должны выделить память для этого объекта и сохранить ссылку на него. Помните, что если вы дали своему QObject родителям, то этот родитель автоматически обработает удаление своего ребенка (но если вы не предоставите родителя, вам придется удалить его вручную или использовать слот deleteLater()QObject)

Смежные вопросы