Как я могу получить QObject :: deleteLater () для обнуления объекта? - PullRequest
12 голосов
/ 23 мая 2011

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

Однако, если я использую функцию deleteLater(), я теряю над ней контроль. Я не знаю, является ли это действительным элементом или мне нужно создать новый. Решение, которое я нашел, состояло в том, чтобы просто отслеживать состояние отдельно, но есть ли лучший способ?

Ответы [ 3 ]

20 голосов
/ 23 мая 2011

В этом нет ничего плохого, если вы вызовете deleteLater() для вашего объекта, а затем установите указатель на nullptr. Фреймворк Qt безопасно удалит объект для вас.

В качестве альтернативы вы также можете подключиться к разрушенному сигналу, чтобы получать уведомления о разрушении вашего объекта, и установить указатель на nullptr в этом слоте.

9 голосов
/ 23 мая 2011

Вы можете использовать QPointer, если удаляемый объект является QObject. Это установит его в NULL.

4 голосов
/ 23 мая 2011

Вы имеете в виду «указатель на ноль»?В C ++ важнее, чем в Java, проводить различие между объектом и указателем на него.Здесь это особенно важно, потому что если вы обнуляете объект, его деструктор не будет работать.Если вы обнуляете указатель на объект, нет проблем, потому что Qt добавит еще один указатель в список «объекты, которые будут удалены».

...