Я немного работаю с C ++ RAD Studio и Builder 6 и часто динамически создаю формы или динамически создаю невизуальные компоненты при написании невизуального кода. При проектировании форм свойство Owner компонентов, перетаскиваемых на эту форму, устанавливается автоматически, поэтому я никогда не беспокоился об этом. Однако при создании чего-либо полученного из TComponent
динамически я всегда прохожу NULL
как Owner
Я всегда беру на себя ответственность за освобождение памяти позже.
Документация Borland / Embarcadero на самом деле не охватывает то, что требуется в случае динамического создания вещей (или, может быть, я не искал в нужных местах), а только кажется, что когда-либо охватывает сценарии на основе формы времени разработки.
Я хотел бы знать, правильно ли делать передачу владельца NULL для динамически создаваемых компонентов или это может привести к внутренним проблемам, которые проявятся позже.
Код компилируется и работает нормально, но мне интересно, является ли он причиной или потенциально вызывает какие-либо проблемы за кадром.
Это, конечно, не неправильно.
Передача владельца, как вы уже намекнули, избавляет вас от необходимости самим управлять временем жизни объекта. Там нет скрытых внутренних побочных эффектов, которые требовать Вам передать хозяина.
FWIW: Создание / использование и уничтожение компонентов, не являющихся владельцами, не редкость, мы делаем это постоянно.
редактировать ревность к Реми
Хотя компоненты, которые поставляются с вашей установкой, можно использовать без владельца (кроме некоторых угловых случаев, таких как TXMLDocument, которые действуют по-разному с назначенным владельцем) , всегда есть возможность третья вечеринка или компонент домашнего приготовления, который полагаться на владельца назначается.
Других решений пока нет …