2015-03-17 7 views
2

Есть ли контейнер Qt, который знает об уничтоженном сигнале QObject и удаляет элемент, если элемент был уничтожен?QObject selfdeestruction aware container

I.e. как это:

QObject *obj1 = new MyObject(); 
QObject *obj2 = new MyObject(); 
QObjectContainer c; 
c.add(obj1); 
c.add(obj2); 
qDebug() << c.size(); // Prints 2 
delete obj1; 
qDebug() << c.size(); // Prints 1 
+0

Подождите, у вас есть недостаток в вашей идее. Если вы удалите объект, как бы вы нашли его индекс в массиве? Вам нужно будет выполнять полный поиск каждый раз. Подумайте об этом, он не может быть реализован каким-либо разумным способом. Даже если ваш массив ловит сигнал 'destroy()', он получает только адрес указателя, а не его индекс в массиве. Вам нужно будет искать его по значению. Производительность была бы ужасной. – sashoalm

+0

Добавьте свои объекты в качестве дочерних элементов фиктивного родителя QObject ;-) – peppe

ответ

1

Вы можете сделать это самостоятельно, ловя сигнал destroyed() внутри container -derived класса.

P.S. Нет класса Qt, AFAIK.

0

QPointer будет автоматически ясно само по себе, когда объект указал удален

+0

Ну, у этого мелкого бита есть список, который удалит QPointer, если содержащийся объект, на который указывает, будет удален. – ManuelSchneid3r

+0

@ ManuelSchneid3r вы можете выполнять некоторую бухгалтерию во время итерации, хотя индексированный список, вероятно, не является хорошей идеей, вместо этого контейнер, подобный набору, будет лучше. –

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

  • Нет связанных вопросов^_^