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