Что именно такое «ручка»? - PullRequest
       5

Что именно такое «ручка»?

6 голосов
/ 01 сентября 2010

Я часто слышал о «дескрипторах», что это за дескрипторы?

Редактировать: Например, я слышал о: дескрипторы окон обрабатывают дескрипторы файлов

и так далее.Эти вещи одинаковы?Или это какие-то абстрактные термины?

Ответы [ 3 ]

6 голосов
/ 01 сентября 2010

Дескриптор - это косвенный способ ссылки на объект, принадлежащий ОС или библиотеке. Когда операционная система или библиотека владеет объектом, но хочет позволить клиенту ссылаться на него, она может предоставить ссылку на этот объект, называемую дескриптором.

Дескрипторы могут быть реализованы разными способами. Обычно они не являются ссылками в смысле C ++ или C #. Часто они являются указателями, приведенными к какому-либо непрозрачному типу, или они могут быть (или содержать) индекс в таблице объектов, которые принадлежат операционной системе или библиотеке.

Например, в Windows, если вы создаете окно, ОС создает объект, который представляет окно, но не возвращает указатель на этот объект. Вместо этого он возвращает дескриптор окна, который обеспечивает дополнительный уровень косвенности. Когда вы передаете дескриптор окна обратно в другом вызове ОС, ОС знает, какой объект окна использовать, основываясь на дескрипторе. Это предотвращает прямой доступ вашего кода к объекту окна.

Дополнительный уровень косвенности позволяет ОС или библиотеке выполнять такие действия, как перемещение объектов, подсчет ссылок и вообще контролировать, что происходит с объектом. Как и идиома PIMPL, реализация может полностью измениться, сохраняя при этом исходный API и, следовательно, не заставляя клиентов перекомпилировать. Это особенно полезно, если вы пытаетесь предложить не объектно-ориентированный API для клиентов, написанных на процедурных языках, таких как C.

5 голосов
/ 01 сентября 2010

«Дескриптор» - это другое имя для ссылки на ресурс, который управляется программистом явно, а не автоматически средой выполнения.

1 голос
/ 01 сентября 2010

Дескрипторы - это указатели на неуправляемые ресурсы, такие как дескрипторы файлов, дескрипторы подключения к базе данных, дескрипторы окон и т. Д. Поскольку в большинстве случаев они являются дескрипторами неуправляемых ресурсов, они не будут автоматически собирать мусор, и вам необходимо обеспечить правильное освобождениеих или вы можете услышать о протекающих ручках .

...