c++-cli - '^' 与 Cpp 中的类名的含义

我在 cpp 中阅读了一些代码,发现了一些类似的代码

<classname>^ instancename

.它有什么用??

我尝试搜索但没有得到任何答案。

最佳答案

它代表一个托管指针,^ 指向一个垃圾收集对象(由框架处理)。

您可以查看 this更多细节

In Visual C++ 2002 and Visual C++ 2003, __gc * was used to declare a managed pointer. This is replaced with a ^ in Visual C++ 2005, for example 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();   
}

关于c++-cli - '^' 与 Cpp 中的类名的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23356059/

相关文章:

regex - 使用正则表达式提取最后一次出现

nunit - Nunit 中整个运行的设置和拆卸?

heroku - 通过 Curl 发布到 Hubot

asp.net - Breeze 查询错误,即使结果返回

sonarqube - 为什么 return 语句会增加复杂度?

r - 使用 Rtools/MinGW 编译 Armadillo

functional-programming - Erlang supervisor 和一个关键的

r - 将 R 中两个帧中的变量与循环进行比较

clojure - 为什么 Clojure rationals 优先使用 Java `BigInte

smartsheet-api - 工作表数据的预期语义是什么?应该返回空值吗?