【发布时间】:2012-02-07 04:10:29
【问题描述】:
我有一个自定义 GTK+ 小部件,我在 C++ 文件(而不是 C)中编译它。大部分代码是 C++ 的 C 子集。该应用程序似乎运行良好。 (现在它只显示一个包含小部件的顶级窗口。)但是,我在小部件结构中包含了一个析构函数,并注意到该析构函数从未被调用。
- 我应该怎么做(不使用 gtkmm)才能确保调用析构函数?
- 在 C++ 中实现 GTK+ 小部件时,我应该注意哪些其他后果?
【问题讨论】:
我有一个自定义 GTK+ 小部件,我在 C++ 文件(而不是 C)中编译它。大部分代码是 C++ 的 C 子集。该应用程序似乎运行良好。 (现在它只显示一个包含小部件的顶级窗口。)但是,我在小部件结构中包含了一个析构函数,并注意到该析构函数从未被调用。
【问题讨论】:
GTK 使用面向对象的 C,其中面向对象的部分使用函数指针进行可视化。因此,如果您可以使用 gtk 小部件的 C 端代码缓存您的 this 指针,那么 here is more info...
如果你没时间了,那就去看看this example...在这个例子中寻找gtk_cpu_destroy,下面的代码设置了widget中的函数指针。
object_class->destroy = gtk_cpu_destroy;
除了gtkmm,还有gfc project,我觉得更干净,也更容易理解……
在 C++ 中实现 GTK+ 小部件时我应该注意哪些其他后果?
我的问题是您的自定义小部件是否真的是 gtk 小部件或 gdk 小部件...并非所有 gdk 事件都在 gtkmm 中处理(或者至少它们不是在 2009 年),因此请注意您的应用程序可能经常崩溃,如果您的小部件广泛使用 gdk,并且 gdk 事件没有被捕获。 systemtap 之类的工具可能会帮助您捕获导致问题的事件。
【讨论】: