托管和非托管的c++是啥意思,有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了托管和非托管的c++是啥意思,有啥区别?相关的知识,希望对你有一定的参考价值。

c#入门经典(第3版)的1.1.1中提到的!

所谓托管就是在虚拟机中运行的.net程序。非托管就是直接运行的普通可执行程序。

托管C++指的C++/CLI 很少会有人用,和C++差异比较大
参考技术A 所谓托管是指内存管理由系统而不是由程序员管理。
像C#这样的语言的内存管理(内存的分配和释放)都是由系统管理的。所以只有new而没有delete。
C++有个很重要的特点就是内存由程序员管理。所以分配内存以后,要程序员自己释放。如果没有释放就会有内存泄露,如果在不该释放时释放了,就会出现所谓的野指针。
在C++把内存管理交给系统的,由系统来负责释放,就被称为托管。
托管C++是微软所创造一种扩展C++的一种叫法。英文写出来是Managed C++,就更能看出宣传有系统管理内存这个意思。
其实这可以看出微软的一个噱头。尽管在当时引起了很多人的兴趣,但多数对所谓的Managed C++不满意。所以后来微软推出了C++/CLI,相对Managed C++对标准的C++做了很多更激进的改造。当然C++/CLI依然有系统(准确的说是.net框架)管理内存功能,所以也有人把C++/CLI依然称为托管C++。
说道区别,你可以简单的把托管C++看成在语言层次上支持.net框架。
但严格的说没有非托管C++,因为托管只是一种对C++的扩展。使用标准C++理论上说也可以支持.net框架。就像支持其他系统一样。不使用.net框架,也C++可以利用别的办法由系统来管理内存。
区别主要在语言层次上,以C++/CLI为例:
C++/CLI有一种特殊的语法,托管指针(或者说是句柄),用^表示
比如System::String^ s = "abc";
这样的就是C++/CLI特有的。
很多纯C++支持者,对这种做法嗤之以鼻。因为使用了这种语法的C++的程序在别的编译器下肯定通不过。
我个人到不觉得有什么。C++/CLI可以说是C++的一个变种。语法的角度看是C++的一个超集。如果你的程序没有移植要求,而且又需要使用.net框架,到的确是个不错的选择。

以上是关于托管和非托管的c++是啥意思,有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

托管和非托管代码是啥意思? [复制]

HRESULT、DWORD 和 HANDLE 在非托管代码中是啥意思?

HRESULT、DWORD 和 HANDLE 在非托管代码中是啥意思?

如何在托管 (C#) 和非托管 (C++) 代码之间来回传递数组内容

C#调用C++编写的DLL(非托管)

托管代码和非托管代码的区别