Я знаю, что тоже не совсем правильно спрашиваю. Пожалуйста, помогите мне лучше сформулировать мой вопрос.
Мне тяжело складывать мысли вокруг ручек - в некотором смысле это похоже на указатели. Но, в отличие от указателей, похоже, что я могу присваивать значения непосредственно переменной дескриптора, и это влияет на базовое значение данных, а не на сам дескриптор.
Тестовый код ясно показывает, что я получаю одно и то же значение, использую ли я дескриптор или «разыменую» дескриптор, чтобы добраться до данных. Очевидно, что это не будет работать с неуправляемыми указателями. Что я не понимаю?
#include <iostream>
int main()
{
int ^y;
int ^a, ^b, ^c;
long x;
y= gcnew int(100);
a=y;
b=y;
c=y;
c= gcnew int(200);
b= 300;
System::Console::WriteLine(y); // returns 100 (instead of something pointer-like)
System::Console::WriteLine(*y); // also returns 100
System::Console::WriteLine(a); // 100
System::Console::WriteLine(b); // 300
System::Console::WriteLine(c); // 200
x = static_cast<long>(y);
*y = 10;
System::Console::WriteLine(x); // 10
System::Console::WriteLine(y); // 10
System::Console::WriteLine(*y); // 10
}
Изменить, чтобы добавить - я подозревал, что WirteLine, возможно, сделал разыменование для меня, но я бы ожидал, что статическое приведение к долго не будет. Это также относится к автонавангу?