5

我记得在某处看到“^”运算符在托管 C++ 代码中用作指针运算符。因此“^”应该等同于“*”运算符对吗?

假设我的理解是正确的,当我开始理解 .Net 并编写了一些示例程序时,我遇到了一些这样的代码:

String ^username; //my understanding is you are creating a pointer to string obj
.
.         // there is no malloc or new that allocates memory to username pointer
.
username = "XYZ"; // shouldn't you be doing a malloc first??? isn't it null pointer

我很难理解这一点。

4

3 回答 3

8

String^是指向托管堆的指针,也就是句柄。指针和句柄不可互换。

调用new将在非托管堆上分配一个对象并返回一个指针。另一方面,调用gcnew将在托管堆上分配一个对象并返回一个句柄。

该行username = "XYZ"仅仅是一个编译器糖。它相当于

username = gcnew String(L"XYZ");
于 2009-07-14T20:58:34.610 回答
3

这是对垃圾收集字符串的引用,而不是指针。

当不再引用它时,它将自动分配和释放。

于 2009-07-14T20:57:27.093 回答
2

如果你认为这与你^相似,shared_ptr你将离真相不远。

于 2009-07-14T21:04:34.473 回答