Часто рекомендуется использовать deleteLater()
вместо обычного delete
в Qt. Однако это приводит к проблеме оборванных объектов: они помечены для удаления, но все еще отображаются в дочерних списках, возвращаемых Qt API. (Так как это поведение является серьезным противоречием, мое быстро развивающееся чувство Qt quirks заставило меня проверить его. Они делают.) Итак, есть ли идиоматический способ отслеживать такие объекты? Я мог бы, конечно, использовать раствор однорангового какКак отслеживать объекты, запланированные для последующего удаления?
class DeleteLaterable
{
public:
void markForDeletion() { mMarked = true; }
bool isMarked() const { return mMarked; }
private:
bool mMarked = false;
};
и публично наследовать все от него, но он открывает совершенно другую банку виртуальных червей наследования. Любые лучшие идеи?
Удалить ребенка, а затем 'deleteLater()'. – dtech
Будет ли это работать, если вы просто вызываете setParent (nullptr) при планировании удаления объекта? –
Спасибо, ребята. Пойдем, выберем его из соответствующих списков вручную. – sigil