关于C++托管和非托管

所谓托管是指内存管理由系统而不是由程序员管理。
像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++的原代码,实际上可以直接编译成托管代码。MFC也好ATL也好……这样看起来在.NET中最强大的编程语言就是C++了:它不仅可以编写托管程序,甚至可以将标准C++的代码也编译成托管程序!其实VC++最强大的地方不止如此,它还在于能够编写混合了托管和非托管的代码的程序!!!这样最大的好处不仅可以将关键代码直接编译成非托管的代码,还可以避免被反编译。

如何在托管C++代码中混合托管和非托管代码

  很简单,只要从#pragma unmanaged编译指示开始的程序,一率编译成非托管代码;要想恢复成托管代码,只要使用#pragma managed就可以了。


引用出处:http://blog.csdn.net/road2010/article/details/9366311

https://zhidao.baidu.com/question/86331750.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值