理解 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^的主要内容,如果未能解决你的问题,请参考以下文章