我正在阅读cpp中的一些代码,我发现了一些像
这样的代码<classname>^ instancename
。它有什么用?
我试过搜索但没有得到任何答案。
答案 0 :(得分:2)
它表示托管指针,^指向垃圾收集对象(由框架处理)。
您可以查看this了解详情
在Visual C ++ 2002和Visual C ++ 2003中,__ gc *用于声明a 托管指针。在Visual C ++ 2005中,它被替换为^ 示例ArrayList ^ al = gcnew ArrayList();.
它们的分配也不同,例如:
NativeObject* n = new NativeObject();
ManagedObject^ m = gcnew ManagedObject();
另请查看 MSDN 以获取更多详情
此示例显示如何在托管堆上创建引用类型的实例。此示例还显示您可以使用另一个句柄初始化一个句柄,从而导致对托管的垃圾收集堆上的同一对象进行两次引用。请注意,将nullptr(C ++组件扩展)分配给一个句柄不会标记垃圾回收的对象。
// mcppv2_handle.cpp
// compile with: /clr
ref class MyClass {
public:
MyClass() : i(){}
int i;
void Test() {
i++;
System::Console::WriteLine(i);
}
};
int main() {
MyClass ^ p_MyClass = gcnew MyClass;
p_MyClass->Test();
MyClass ^ p_MyClass2;
p_MyClass2 = p_MyClass;
p_MyClass = nullptr;
p_MyClass2->Test();
}
答案 1 :(得分:1)
句柄声明符(^
,发音为"hat"
,C++/CLI术语),修改了类型说明符,表示声明的对象应该在自动删除时自动删除系统确定该对象不再可访问。
使用句柄声明符声明的变量的行为类似于指向对象的指针。但是,变量指向整个对象,不能指向对象的成员,而不是支持指针算术。使用间接运算符(*
)访问对象,使用箭头成员访问运算符(->
)来访问对象的成员。
查看here和this thread了解详情。