C++/CLI 中的托管对象和非托管对象是什么?
C++/CLI 中的托管对象和非托管对象是什么
What are Managed objects and unmanaged object in C++/CLI
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
C++/CLI 中的托管对象和非托管对象是什么
What are Managed objects and unmanaged object in C++/CLI
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
托管对象是 .NET 框架及其类 C++ 语言实现的一项功能,并且由 .NET 垃圾收集器为您管理其内存。 C++ 本身没有这样的概念,并且有一种更好的(一般)管理所有资源(不仅仅是内存)的方法,称为 RAII。
Managed objects are a feature of the .NET framework and its implementation of a C++-like language, and have their memory managed for you by the .NET garbage collector. C++ itself has no such concept, and a better (in general) way of managing all resources (not just memory) called RAII.
托管/非托管概念通常不是 C++ 的。这是微软.Net技术的代言。
在正常的普通 C++ 应用程序中,应用程序本身负责删除它分配的所有内存。这就需要开发者非常小心何时删除内存。如果内存被删除得太快,应用程序可能会崩溃(如果它仍然有指向它的指针)。如果内存删除得太晚,或者根本没有删除,则应用程序会发生内存泄漏。
Java 和 .Net 等环境通过使用垃圾收集器解决了这个问题。开发人员不应该再删除内存,垃圾收集器会为他做这件事。
在“本机”.Net 语言(如 C#)中,整个语言都使用垃圾收集器概念。为了更轻松地从普通的 C++ 应用程序过渡到 .Net,Microsoft 为其 C++ 编译器添加了一些扩展,以便 C++ 开发人员可以从 .Net 的优势中受益。
每当您使用普通的纯 C++ 时,Microsoft 都会谈论非托管或本机 C++。如果您在 C++ 中使用 .Net 扩展,Microsoft 会谈论托管 C++。如果您的应用程序同时包含两者,那么您就有一个混合模式应用程序。
The concept Managed/Unmanaged is not typically C++. It is Microsoft .Net technology speak.
In normal, plain C++ applications, the application itself is responsible for deleting all the memory it has allocated. This requires the developer to be very careful about when to delete memory. If memory is deleted too soon, the application may crash if it still has a pointer to it. If memory is deleted too late, or not deleted at all, the application has a memory leak.
Environments like Java and .Net solve this problem by using garbage collectors. The developer should not delete memory anymore, the garbage collector will do this for him.
In the 'native' .Net languages (like C#), the whole language works with the garbage collector concept. To make the transition from normal, plain C++ applications to .Net easier, Microsoft added some extensions to its C++ compiler, so that C++ developers could already benefit from the advantages of .Net.
Whenever you use normal, plain C++, Microsoft talks about unmanaged, or native C++. If you use the .Net extensions in C++, Microsoft talks about managed C++. If your application contains both, you have a mixed-mode application.
C++ 中不存在托管对象。
它们存在于Microsoft 的 C++ .NET 扩展中,完整的解释可能有点长,抱歉。
Managed objects do not exist in C++.
They exist in Microsoft's .NET extensions to C++, and a complete explanation would be a bit long, sorry.