Как лучше управлять временем жизни виджета графического интерфейса?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как лучше управлять временем жизни виджета графического интерфейса?

Сообщение Anonymous »

Я создаю небольшую библиотеку графического интерфейса, которая будет создавать кнопки, контрольные списки, полосы прокрутки и т. д., и мне трудно решить, какой подход лучше.
У меня есть базовый класс Widget< /code>, который может иметь дочерние объекты, унаследованные от виджета, а также может быть дочерним. У меня есть два противоположных подхода:
  • Используйте необработанные указатели. Дочерний список будет выглядеть примерно так: std::vector Children и при уничтожении он удалит их всех (с помощью специального деструктора). Также при таком подходе пользователь может вручную удалить объект Widget, и он будет правильно очищен. Но необработанные указатели на объекты Widget иногда копируются во внутренние буферы библиотеки для рисования и других вещей. Если объект будет удален, находясь в каком-то буфере, это будет катастрофа.
  • Используйте общие указатели. Объекты будут уничтожаться всякий раз, когда они действительно не используются, но если они имеют несколько родителей или находятся в каком-то буфере, они не будут удалены. Также пользователь не может вручную использовать удаление для принудительного удаления объекта, а только общий указатель на него. И я упомяну, что если пользователь попытается создать объект в стеке/куче вручную (без общего указателя), его время жизни будет управляться неправильно и приведет к очевидным последствиям.
Какой лучше? Или, может быть, как улучшить одно или оба, чтобы они были надежными?

Подробнее здесь: https://stackoverflow.com/questions/792 ... t-lifetime
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»