gtkmm使用这种结构来管理小部件的生命周期:
Gtk::Widget* aWidget = Gtk::manage(new Widget());
Gtk::Widget containerWidget;
containerWidget.add(*aWidget);
这将aWidget的生命周期管理委托给containerWidget。当containerWidget被清理时,它也会清理aWidget-类似于Delphi的“所有者”概念。
我们还有几种智能指针类型,特别是C++11智能指针模板,我在任何地方都使用它们。
我发现manage/add语法更易于使用和清洁,但它不是C++标准的一部分,而是一个gtkmm特定的功能,这让我想要坚持使用std::shared_ptr等。
所以我想知道std智能指针与gtkmm manage/add模型的优缺点是什么(除了需要在拥有者容器被删除后仍需引用或当您有一个没有包含小部件的顶层小部件的情况)。
RefPtr
公开的小部分堆分配窗口小部件外,没有其他堆分配的窗口小部件。FLTK看起来很不错,直到我意识到它在两个(或者说1.5个?)版本之间分裂了。wxWidgets在Linux上也使用GTK+,而且充斥着MACROS(ugh)
,所以算了吧。GTKmm赢了!我很兴奋能够使用它,并看到它与语言一起不断发展。 - underscore_d