c++/cli的用途

两年前曾经在中石油做过一段时间的外包项目。当时client和一些密集计算部分使用了c++/cli 这是我第一次接触这个东西。

好久前曾经体验过 managed c++。可惜这东西的语法给我印象太坏。。用了一堆下划线不说。。连托管对象和一般heap对象都用* 表示。极其混乱。。记得当时有一个网络包是用managed c++写的,看了头大无比。后来只能自己部分实现了一个简易的顶着。

 

c++/cli是个极其复杂的东西。可以说是个怪物。有些佩服ms的人,居然可以把一套.net和c++基本上做到了无缝连接。

 

先说缺点:

 

1:庞大,类型之间的关系不易搞清楚。。特别是.net based generic type和一般的template。如果混用是件需要小心处理的事情。记得当初做地图cache使用template实现了一个policy模式的插件,使用者说没见过...不会用...........

 

2: 编译速度慢...和c#比 非常慢...而且intelli sense经常会无故失效。。导致开发效率实际上不高...

 

3:资料不多。。书的话 印象中只有一本 c++/cli in action。

 

优点:

 

1:无缝连接:可以很方便使用各种native lib,如果嫌麻烦可以直接调用.net的类库。可以写一个 同时给.net & non .net用的dll。当时要写一个hook的东东,里面同时使用了win32 api, boost和一些.net的库。如果使用C#,不免要做一堆p/invoke。p/invoke不好在于交互的粒度太大,是以函数作为一个单位的。对于某些需要做结构上的更细粒度的交互就显得很麻烦。而且最大的毛病是经常搞乱参数的类型。。int* 可以传 IntPtr, 可以传Int32, UInt32。见过好几个人的p/invoke wrapper。居然传入的参数类型都不一样......

 

2: 性能提高。c++/cli支持 stack semantics。可以及时释放managed object而不需要等到finalize。

 

3:内存泄露的减少。对于native c++ 虽然有smart pointer 内存泄露和利用率不高依然是个毛病。如果对于非托管部分的使用维持在一个范围内,那么相对来说产生内存泄露的机会会少些。目前来看.net的垃圾回收 还是不错的。因为c++/cli可以使用托管对象。所以无形中非托管 (unsafe)部分的代码量会减少。 以前我们的使用仅仅局限于api的调用。和一些计算方面。这些相对较易排查。

 

 

对于是否要是用c++/cli。我觉得 首先必须要有人对c++和.net都有些了解。如果没有,最好不要使用。

 

c++/cli的开发效率不高,所以应尽量减少在代码中的比例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值