gtkmm управлять / добавлять против умных указателей:

gtkmm обеспечивает управление жизненным циклом виджетов с помощью такой конструкции:

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

Gtk::Widget containerWidget;

containerWidget.add(*aWidget);

Это делегирует управление временем жизни aWidget в containerWidget. Когда containerWidget очищается, он также очищает aWidget — аналогично концепции Delphi «владелец».

У нас также есть несколько типов интеллектуальных указателей, в частности шаблоны интеллектуальных указателей C ++ 11, которые я использую повсюду.

Я считаю, что синтаксис управления / добавления проще и понятнее в использовании, но он не является частью стандарта C ++, это особенность gtkmm, которая заставляет меня думать, что я должен придерживаться std :: shared_ptr и т. Д.

Поэтому мне интересно, каковы преимущества / недостатки интеллектуальных указателей std по сравнению с моделью управления / добавления gtkmm (кроме случаев, когда вам нужна ссылка после удаления контейнера владельца или когда у вас есть виджет верхнего уровня, который не имеет содержащий виджет).

2

Решение

Я не думаю, что это практично shared_ptr для виджетов, если вам не нужно сохранять ссылку на этот виджет после его добавления. Вам лучше иметь управляемый виджет вместо использования shared_ptr,

Хорошая вещь в gtk :: manage заключается в том, что вы можете создать объект в куче, добавить его в контейнер и забыть о нем, а когда этот контейнер будет уничтожен, он уничтожит виджет.

Как правило, я создаю свои виджеты, управляемые, если мне не нужно ссылаться на них после добавления их в контейнер, если мне нужно ссылаться на них, я выделяю указатель.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]