Что означает значение nil owner в конструкторе компонентов - PullRequest
3 голосов
/ 24 марта 2011

Я смотрел на этот вопрос , и мне интересно, что означает значение nil как владельца в конструкторе компонентов.

SomeComponent := TSomeComponent.Create(nil);

Я знаю, что я должен освободить его сам при использовании этого конструктора, но разве это единственная причина передать владельца при создании? И что происходит, когда я забываю освободить его и закрыть свое приложение - означает ли это, что этот объект остается в памяти как мусор?

Большое спасибо:)

Ответы [ 2 ]

15 голосов
/ 24 марта 2011

Это означает, что вы сами ответственны за его освобождение.

Если вы отбрасываете компонент на форме, он создается с формой в качестве владельца. Это означает, что когда форма свободна, она освободит все принадлежащие ей компоненты. То же самое применяется, если вы передаете другого владельца (например, создаете TButton во время выполнения и делаете TPanel его владельцем); когда владелец уничтожается, он освобождает все принадлежащие ему компоненты в процессе.

Использование nil в качестве владельца означает, что вы создаете его вручную в коде, и вы берете на себя ответственность освободить его самостоятельно. Если вы забудете и ваше приложение закроется, его память будет возвращена операционной системе. Однако, если ваше приложение работает долгое время после того, как вы забыли, у вас есть кусок памяти, который не используется.

1 голос
/ 24 марта 2011

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

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

...