【发布时间】:2018-05-18 10:21:59
【问题描述】:
我是 C++/cli 编程的新手,今天我在我的一个项目中遇到了gcroot,并且对它的用法感到困惑。
我发现gcroot 是GChandle 的包装器,它通知垃圾收集器正在引用托管对象,因此该对象不会被删除。
因此使用gcroot 在本机类中声明属性以保存对托管对象的引用是有意义的。但我发现gcroot 在项目中也随处使用,如下所示:
int NativeFunction()
{
gcroot<ManagedType^> xx = gcnew ManagedType();
return xx->FunctionCalled();
}
这种实现是一个好习惯吗?这里有必要使用gcroot吗?
如果我声明 xx 而不声明 gcroot 会怎样,例如:
ManagedType^ xx = gcnew ManagedType();
有什么问题吗?
【问题讨论】:
标签: c++ visual-studio visual-c++ c++-cli clr