Оголошення дескрипторів, що відслідковують

Для специфікації дескриптора типу, необхідно помістити символ : (часто називаний "капелюхом") слідом за ім'ям типу. Наприклад, от як можна оголосити відслідковує дескриптор, що, по імені proverb, що може зберігати адреса об'єкта String:

String^ proverb;

Це визначає змінну proverb дескриптор, що відслідковує як, типу String^. Коли зявляетсяc дескриптор, він автоматично iнiцiалiзуеться нулем, тому ні на що не посилається. Для явної установки дескриптора в нуль служить ключове слово nullptr:

proverb = nullptr; // Установити дескриптор в null

Зверніть увагу, що тут не можна використати 0, як це можна робити з рідними покажчиками. Якщо iнiцiалiзувати дескриптор нулем, то значення 0 перетвориться в тип об'єкта, на який буде посилатися дескриптор, і в нього буде поміщена адреса цього нового об'єкта.

Звичайно, можна явно iнiцiалiзувати дескриптор при його оголошенні. От інший оператор, що визначає дескриптор об'єкта String:

String^ saying = L"Деякий довгий рядок";

Цей оператор створює в купі об'єкт String, що містить рядок праворуч від операції присвоювання; адреса нового об'єкта міститься в saying. Типом строкового литерала тут є wchar_t*, а не String. Визначення класу String дає можливість такому литералу бути використаним для створення об'єкта типу String.

А от як створюється дескриптор для типу значення:

int^ value = 99;

Цей оператор створює дескриптор value типу int^, і значення в купі, на якому він указує, iнiцiализуться числом 99. Необхідно пам'ятати, що в цьому випадку створюється різновид покажчика, тому value не може брати участь в арифметичних операціях без його разiменування. Для разiменування дескриптора, що відслідковує, служить операція * - точно так само, як це робиться з покажчиками. Наприклад, нижче представлений оператор, що використає значення, зазначене відслідковує дескриптором, що, в арифметичній операції:

int result = 2*(*value)+15;