Что такое дескриптор в C++?

Что такое мобильное устройство? Более слабый ЦП? Более низкая пропускная способность? В действительности это имеет экран, разрешение которого ниже 320x240 и глубина цвета, ниже 24.

необходимо использовать JavaScript также. Эта ссылка даст Вам общее представление: http://www.w3schools.com/js/tryit.asp?filename=tryjs_browsermonitor

И, эта ссылка будет учить Вас, что что: http://www.w3schools.com/htmldom/dom_obj_screen.asp

93
задан Peter Mortensen 16 February 2013 в 08:07
поделиться

5 ответов

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

Например, HWND в Win32 API - это дескриптор окна. Само по себе это бесполезно: вы не можете почерпнуть из него никакой информации. Но передайте его нужным функциям API, и вы сможете выполнять с ним множество различных трюков. Внутренне вы можете думать о HWND как о просто индексе в таблице окон графического интерфейса (что может не обязательно совпадать с тем, как он реализован, но в этом есть смысл). в вашем вопросе. В основном речь идет о чистом C / C ++.

95
ответ дан 24 November 2019 в 06:17
поделиться

Дескриптор - это указатель или индекс без прикрепленного к нему видимого типа. Обычно вы видите что-то вроде:

 typedef void* HANDLE;
 HANDLE myHandleToSomething = CreateSomething();

Таким образом, в вашем коде вы просто передаете HANDLE как непрозрачное значение.

В коде, который использует объект, он приводит указатель на реальный тип структуры и использует его:

 int doSomething(HANDLE s, int a, int b) {
     Something* something = reinterpret_cast<Something*>(s);
     return something->doit(a, b);
 }

Или он использует его как индекс для массива / вектора:

 int doSomething(HANDLE s, int a, int b) {
     int index = (int)s;
     try {
         Something& something = vecSomething[index];
         return something.doit(a, b);
     } catch (boundscheck& e) {
         throw SomethingException(INVALID_HANDLE);
     }
 }
47
ответ дан 24 November 2019 в 06:17
поделиться

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

Было бы точнее сказать, что указатель - это один тип дескриптора, но не все дескрипторы являются указателями.

Например, дескриптор также может быть некоторым индексом в таблице в памяти, которая соответствует записи, которая сама содержит указатель на некоторый объект.

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

Также должно быть очевидно, что нет никакого Единственный ответ на вопрос «что такое дескриптор», потому что дескрипторы для разных вещей, даже в одной и той же системе, могут быть реализованы по-разному «под капотом». Но ты не должен

27
ответ дан 24 November 2019 в 06:17
поделиться

В C ++ / CLI дескриптор - это указатель на объект, расположенный в куче сборщика мусора. Создание объекта в (неуправляемой) куче C ++ достигается с помощью new , а результатом выражения new является «нормальный» указатель. Управляемый объект размещается в куче GC (управляемой) с помощью выражения gcnew . В результате получится ручка. Вы не можете выполнять арифметические операции с указателями для дескрипторов. У вас нет свободных ручек. GC позаботится о них. Кроме того, сборщик мусора может перемещать объекты в управляемой куче и обновлять дескрипторы, чтобы они указывали на новые местоположения во время работы программы.

5
ответ дан 24 November 2019 в 06:17
поделиться

Это появляется в контексте Handle-Body-Idiom , также называемой идиомой Pimpl. Это позволяет сохранить ABI (двоичный интерфейс) библиотеки одним и тем же, сохраняя фактические данные в другом объекте класса, на который просто ссылается указатель, содержащийся в объекте «дескриптор», состоящем из функций, которые делегируют этому классу » Тело ».

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

5
ответ дан 24 November 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: