理解 C++ .Net 中的 String^

Posted

技术标签:

【中文标题】理解 C++ .Net 中的 String^【英文标题】:understanding String^ in C++ .Net 【发布时间】:2009-07-14 20:47:04 【问题描述】:

我记得在某处看到“^”运算符在托管 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

我无法理解这一点。

【问题讨论】:

【参考方案1】:

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

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

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

username = gcnew String(L"XYZ");

【讨论】:

【参考方案2】:

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

当没有东西引用它时,它会自动分配和释放。

【讨论】:

【参考方案3】:

如果您认为^shared_ptr 相似,那您就离事实不远了。

【讨论】:

以上是关于理解 C++ .Net 中的 String^的主要内容,如果未能解决你的问题,请参考以下文章

C++中的string详解

C++中的c_str()函数用法

C++ - string类型转换int类型

C++ - string类型转换int类型

c++ string详解 assign

为什么String.IsNullOrEmpty(str)而不是str.IsNullOrEmpty()?