Я часто слышал о "ручках", что это такое?
Изменить: например, я слышал о: Windows обрабатывает дескрипторы событий, дескрипторы файлов
и так далее. Это одно и то же? Или это какие-то абстрактные термины?
Я часто слышал о "ручках", что это такое?
Изменить: например, я слышал о: Windows обрабатывает дескрипторы событий, дескрипторы файлов
и так далее. Это одно и то же? Или это какие-то абстрактные термины?
Дескриптор — это косвенный способ ссылки на объект, принадлежащий ОС или библиотеке. Когда операционная система или библиотека владеет объектом, но хочет разрешить клиенту ссылаться на него, она может предоставить ссылку на этот объект, называемую дескриптором.
Ручки могут быть реализованы по-разному. Обычно они не являются ссылками в смысле C++ или C#. Часто они представляют собой указатели, приведенные к какому-то непрозрачному типу, или они могут быть (или содержать) индексом в таблице объектов, принадлежащих операционной системе или библиотеке.
Например, в Windows, если вы создаете окно, ОС создает объект, представляющий окно, но не возвращает указатель на этот объект. Вместо этого он возвращает дескриптор окна, что обеспечивает дополнительный уровень косвенности. Когда вы передаете дескриптор окна обратно в другом вызове ОС, ОС знает, какой объект окна использовать на основе дескриптора. Это предотвращает прямой доступ вашего кода к объекту окна.
Дополнительный уровень косвенности позволяет операционной системе или библиотеке выполнять такие действия, как перемещение объектов, подсчет ссылок на объекты и вообще управление тем, что происходит с объектом. Подобно идиоме PIMPL, реализация может полностью измениться, сохраняя исходный API и, таким образом, не заставляя клиентов перекомпилировать. Это особенно полезно, если вы пытаетесь предложить необъектно-ориентированный API для клиентов, написанных на процедурных языках, таких как C.
"Дескриптор" — это другое название ссылки на ресурс, который явно управляется программистом, а не автоматически средой выполнения.
Дескрипторы — это указатели на неуправляемые ресурсы, такие как дескрипторы файлов, дескрипторы подключения к базе данных, дескрипторы окон и т. д. Поскольку они являются дескрипторами неуправляемых ресурсов, в большинстве случаев они не будут автоматически собирать мусор, и вам необходимо обеспечить их надлежащее освобождение или вы может услышать об утечке дескрипторов.