【发布时间】:2015-03-17 12:10:01
【问题描述】:
是否有一个 Qt 容器,它知道 QObject 的被破坏信号并在元素被破坏时移除元素?
即像这样:
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
【问题讨论】:
-
等等,你的想法有缺陷。如果你删除一个对象,你将如何在数组中找到它的索引?您每次都需要执行完整的搜索。想一想,它不能以任何合理的方式实现。即使您的数组捕获到
destroyed()信号,它也只会获取指针的地址,而不是它在数组中的索引。您需要按值搜索它。表现会很糟糕。 -
将您的对象添加为虚拟父 QObject 的子对象 ;-)
标签: qt containers qt5 qobject self-destruction