2

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 管理/追加モデルの利点/欠点は何なのか疑問に思っています (所有者コンテナーが削除された後に参照が必要な場合、または参照を持たない最上位のウィジェットがある場合は別として)ウィジェットを含む)。

4

1 に答える 1