2

gtkmm 使用这种结构提供小部件的生命周期管理:

Gtk::Widget* aWidget = Gtk::manage(new Widget()); 

Gtk::Widget containerWidget;

containerWidget.add(*aWidget);

这将 aWidget 的生命周期管理委托给 containerWidget。当 containerWidget 被清理时,它也会清理 aWidget——类似于 Delphi 的 'owner' 概念。

我们还有几种类型的智能指针,特别是 C++ 11 智能指针模板,我到处都在使用它。

我发现管理/添加语法更易于使用且更简洁,但它不是 C++ 标准的一部分,它是 gtkmm 特定的功能,这让我认为我应该坚持使用 std::shared_ptr 等。

所以我想知道 std 智能指针与 gtkmm 管理/添加模型的优点/缺点是什么(除了在删除所有者容器后需要引用的情况,或者当你有一个没有的顶级小部件时包含小部件)。

4

1 回答 1

2

shared_ptr如果您在添加后不需要保留对该小部件的引用,我认为将其用于小部件并不实用。您最好使用托管小部件而不是使用shared_ptr.

gtk::manage 的好处是您可以在堆上创建对象并将其添加到容器中,然后忘记它,当容器被销毁时,它会销毁小部件。

作为一般规则,如果在将它们添加到容器后不需要引用它们,我会创建托管的小部件,如果确实需要引用它们,我会分配一个指针。

于 2013-07-28T01:39:33.357 回答