首页 > 解决方案 > “= gcnew MyClass()”和“= %MyClass()”有什么区别?

问题描述

和有什么区别

MyClass ^myClass = gcnew MyClass();

MyClass ^myClass = %MyClass();

如果有的话?

两者似乎都有效,但不确定幕后发生了什么。

标签: c++-cli

解决方案


修订:

堆栈语义


上一篇:
因此,在这两种情况下,新创建的对象的地址都分配给了一个指针。出于这个原因,这两个语句似乎工作相同。

区别:
使用gcnew分配具有垃圾收集的托管类型(引用)的内存。

using%MyClass()类似于 using &MyClass(),后者没有垃圾收集。

gcnew:
托管类型(引用或值类型)的内存由 gcnew 分配,并通过垃圾回收释放。

%MyClass():
与标准 C++ 一样,此对象不会被垃圾回收。运算符重载的工作方式类似于标准 C++。每个 * 变成一个 ^,每个 & 变成一个 %。

'^' 的含义:
句柄声明符(^,发音为“帽子”),修改类型说明符,表示当系统确定对象不再可访问时,应自动删除声明的对象。

相关链接:
的含义'%',搜索“运算符重载”
gcnew
含义'^'


推荐阅读