gcroot是什么意思?我在我正在阅读的代码中找到它。gcroot in C++/cli
10
A
回答
15
gcroot是一个C++/cli模板类,它简化了C++/cli类中的托管类型。
例如,您可以有以下几种:
class Native {
public:
Native(Object ^obj) :
netstring(obj->ToString()) { // Initializing the gcroot<String ^>
}
~Native() {
}
void Print() {
array<Char> ^chars = netstring->GetChars(); // Dereferencing the gcroot<String ^>
_wprintf("netstring is:");
if (chars->Length > 0) {
pin_ptr<Char> charptr = &(chars[0]);
_wprintf("%s", (wchar_t const *)charptr);
}
}
private:
gcroot<String ^> netstring;
};
gcroot作为对管理对象或值类型实例的引用和抄袭的对象或值类型实例时,做所有的工作。 通常你需要使用GCHandle和.NET框架的一些C函数。这全部封装在gcroot中。
9
当.NET垃圾收集器运行时,它通过进行可达性分析来确定哪些对象仍在使用中。在查找指向对象的指针时,只分析托管堆,因此如果您有一个从本地对象指向托管对象的指针,则需要知道垃圾收集器,因此它可以将其包含在可达性分析中,因此它可以如果目标在压缩过程中移动,则更新指针。根据rstevens的说法,.NET GCHandle
类可以做到这一点,而C++/CLI是面向C++的GCHandle
包装器,它增加了类型安全性和方便的语法。
相关问题
- 1. 如何使用gcroot
- 2. System.NullReferenceException当使用gcroot
- 3. gcroot没有任何价值
- 4. 为什么Context成为GCRoot?
- 5. gcroot系列 - 元素访问
- 6. 为什么gcroot返回System ^?
- 7. windbg!gcroot <address>不返回根
- 8. 如何在C++。net中将gcroot <Object^>转换为IMyInterface?
- 9. 如何测试NULL或nullptr的gcroot引用?
- 10. in operator in C#
- 11. In-和In TextMate.app
- 12. IN IN JOIN如何?
- 13. In App Purchase in xamarin.forms
- 14. cmpfunc in bsearch()in c
- 15. class in class in java
- 16. JavaFX Text in in Polygon
- 17. Vector3 in Meep in Python
- 18. Array in Array in JSON
- 19. Dictionary for ... in ... in it?
- 20. map3 in scala in Parallelism
- 21. IN
- 22. Flash Builder Profiler用尽java堆空间尝试扩展到GCRoot的路径
- 23. 查找gcroot的工作析构函数<Bitmap^> visual studio中的类
- 24. 当一个对象没有root使用!gcroot和SOS时,这意味着什么?
- 25. EXC_BAD_ACCESS in device..not in simulator。(Adwhirl)
- 26. map2 in scala in Exeption处理
- 27. concat in FSharp.Core.String vs Concat in System.String
- 28. SELECT IN WHERE ID IN GROUP_CONCAT
- 29. Image in mode mosaic in PdfPCell
- 30. Codeigniter Tank Auth Not Log In In?
1st google链接:http://msdn.microsoft.com/en-us/library/481fa11f(v=vs.80).aspx – 2011-02-15 15:05:17