Visual c++ C++/CLI句柄运算符

Visual c++ C++/CLI句柄运算符,visual-c++,c++-cli,Visual C++,C++ Cli,我只是对C++/CLI句柄(^)及其工作原理感到好奇。例如: 我不能理解的第一件事是,公认的答案是插入符号是*(指针)的管理等价物。但是,与*,我可以直接赋值给^ int ^num; num = 4; 这在C++中不起作用: int *num2; num2 = new int[1]; num2 = 10; 为什么会观察到这种行为? 另外,在微软,他们说你不能指向对象的一个成员,而且它不支持指针运算。因此,以下两个代码段都无法编译 int ^num3 = gcnew int[10]; for

我只是对C++/CLI句柄(^)及其工作原理感到好奇。例如:

我不能理解的第一件事是,公认的答案是插入符号是*(指针)的管理等价物。但是,与*,我可以直接赋值给^

int ^num;
num = 4;
这在C++中不起作用:

int *num2;
num2 = new int[1];
num2 = 10;
为什么会观察到这种行为? 另外,在微软,他们说你不能指向对象的一个成员,而且它不支持指针运算。因此,以下两个代码段都无法编译

int ^num3 = gcnew int[10];

for(int i = 0; i<10; i++)
    %(num3 + i) = i
int^num3=gcnewint[10];

for(int i=0;i
^
相当于
*
,用于处理类对象(new/gcnew、作为参数传递、作为类定义的一部分存储等)。指针算法在C++/CLI中不同

下面是与您的代码片段等效的代码:

array<int>^ array1;
array1 = gcnew array<int>(10);

for (int i = 0; i < 10; i++)
    array1[i] = i;
array^array1;
阵列1=新阵列(10);
对于(int i=0;i<10;i++)
阵列1[i]=i;
array^
:这是一个托管引用,存储在堆栈上

array1=gcnew array(10)
:这是在托管堆上创建托管对象(从名为“array”的类),并将引用分配给堆栈上的局部变量


array1[i]=i
:在幕后,它调用“array”类上的一个方法,将索引和新值传递给它(在本例中都是
i

int^
表示对整数的引用。
它不是指向正则整数的指针

CLR中引用类型的句柄不等同于指针。它类似

两者都指向一个对象,但这就是相似性的终点。
这更像是C++ <强> < /强> ./p> 无论如何,装箱整数是一个包装整数的对象。
int^
是对装箱对象的引用,因此除了保存值外,它还可以为null(因为它是引用)

执行
int^=4;
时,装箱对象的构造函数将构造一个值为4的装箱对象。

所以不像C++指针,你不是指向你指向的地址“4”。在一个恰好包含值4的对象上。

你能给我解释一下盒装整数和普通整数的区别吗?@Dwight:微软花钱请人写文档,所以是由志愿者组成的——在请无偿人员花时间解释一些已经很有用的东西之前,先阅读文档able..-]@Dwight:我已经添加了一些解释。请阅读链接。@Yochai Timmer:感谢您对装箱整数的全面解释
int *array1;
array1 = new int[ 10];

for( int i = 0; i < 10; i++)
     *(array1 + i ) = i;
array<int>^ array1;
array1 = gcnew array<int>(10);

for (int i = 0; i < 10; i++)
    array1[i] = i;