【发布时间】:2012-05-07 02:57:31
【问题描述】:
我有一个用 C++ 编写的带有 Qt 库的 GUI。对于我的应用程序,我使用了 TreeView 对象。为了使这个对象的重用变得容易,我制作了一个模板类,我的 QObjects 可以从中继承。由于 moc 不能与模板类一起使用,所以我制作了这样的类:
class Tree : public QObject, public TreeTemplate<TreeType, TreeItemType>
{
Q_OBJECT
};
这样只允许 Tree 类使用 moc(TreeTemplate 不继承 QObject 或使用 Q_OBJECT 宏),同时获得模板的好处。
我的问题是,在退出我的应用程序时,我的应用程序崩溃,没有失败(即使我调用 exit 并跳过 QApplication 清理)。我认为生成的 moc 类可能存在问题,它们的“静态元对象”
我无法使用 valgrind,因为使用了无法处理的 __ASM__。 :-(
有谁知道我使用继承自模板类的模板 Qt 类 (+moc) 的设计是否会导致此问题?
崩溃发生在:libc.so 退出后。
【问题讨论】:
-
gdb 回溯显示什么?
-
添加一个空的虚拟析构函数会改变什么吗?
-
我在 Qt 中退出时的大部分崩溃都发生在我加倍释放类的实例时。大多数情况下,当我将一个类的“新”实例传递给一个拥有所有权的 Qt 容器(即容器将自动销毁它),然后尝试在我自己的代码中销毁它时,就会发生这种情况。