两年前曾经在中石油做过一段时间的外包项目。当时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的开发效率不高,所以应尽量减少在代码中的比例。
分享到:
相关推荐
### Ecma-C++/CLI 实现规范解析 #### 标题与描述概述 标题“Ecma-C++/CLI”及描述“托管C++实现规范,支持托管C++开发!”明确了本标准是关于托管C++(C++/CLI)语言的一个实现规范。C++/CLI是一种结合了传统C++...
- **委托**:讨论 C++/CLI 中委托的定义和用途。 - **原生类与引用类**: - **文字字段**:介绍声明和使用文字字段的方法。 - **只初始化字段**:解释只初始化字段的特性和使用场景。 - **函数**:探讨 C++/CLI ...
### C++/CLI 规范知识点解析 #### 一、引言 《C++/CLI 规范英文版》是一份详细介绍了C++/CLI语言特性和规范的技术文档。C++/CLI是一种混合型编程语言,它允许程序员在C++语法的基础上编写面向对象的代码,并与.NET...
- **C++/CLI中的模运算**:在C++/CLI中,模运算符`%`的用法与原生C++相同,即`a % 2`表示取余操作。编译器会根据上下文判断其用途。 - **C++与C#的区别**: - C++/CLI更偏向于性能敏感的应用程序,支持编译期模板等...
P/Invoke允许C#代码直接调用非托管(即C++)代码的DLL,而C++/CLI则为C++提供了.NET兼容性,使得C++代码可以直接与.NET组件交互。 1. **生成C++ DLL**: - 使用C++创建动态链接库(DLL)是第一步。在Visual Studio...
在编程领域,C#和C++是两种不同的编程语言,它们有着各自的特点和用途。C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持面向对象编程的程序设计语言。而C#是由微软开发的一种现代...
通过上述内容的学习,读者不仅可以了解到遗传算法的基本原理及其在Visual C++ 2008 中的具体实现方法,还能掌握使用C++/CLI和MFC开发应用程序的基础知识。这对于提升编程技能和解决实际问题都非常有帮助。
1. 不同C++标准的关键特性:要求学生识别并理解每种标准引入的新特性及其用途。 2. 面向对象编程:包括封装、继承和多态的基本概念和实践。 3. 模板和泛型编程:如何使用模板来编写通用代码,以及STL(标准模板库)...
请勿用于商业及非法用途,如产生法律纠纷与本人无关 AtomineerUtils是国外的一款用于生成源代码注释的一款VS插件,官方网站:http://www.atomineerutils.com/products.php 通过链接,可以看出这款插件的功能十分强大...
5. **.NET与C++/CLI**:如果Cs2Cpp不仅仅转换语法,还处理.NET框架的特性,那么可能涉及C++/CLI,这是一种扩展的C++版本,用于与.NET Framework交互。 6. **性能与兼容性**:由于C++比C#更为底层,转换后的代码可能...
请勿用于商业及非法用途,如产生法律纠纷与本人无关 AtomineerUtils是国外的一款用于生成源代码注释的一款VS插件,官方网站:http://www.atomineerutils.com/products.php 通过链接,可以看出这款插件的功能十分强大...
不像GhostDoc那样,只支持C#,这款插件,支持C、C++、C++/CLI、C#、Java语言等,由此可以看出其强大,注释的风格可以灵活配置。 虽然它功能十分强大,但是由于是收费的软件,所以当使用超过30天后,就无法再继续适用...
通过链接,可以看出这款插件的功能十分强大,不像GhostDoc那样,只支持C#,这款插件,支持C、C++、C++/CLI、C#、Java语言等,由此可以看出其强大,注释的风格可以灵活配置。 虽然它功能十分强大,但是由于是收费的...
- **C++/CLI**:新增了对C++/CLI的支持,这是一种混合型语言,可以在.NET Framework中编写原生代码和托管代码。 ##### 4. 性能优化 - **编译速度**:优化了编译速度,提高了开发效率。 - **内存管理**:改进了内存...
因此,这个项目可能是使用C++/CLI实现的,或者至少包含了一些与C++/CLI相关的代码。 在压缩包内的《SkeletonBasics-WPF》文件夹中,我们可以预期找到以下内容: 1. **源代码文件**:可能包括`.cpp`和`.h`文件,...
Visual C++是微软公司开发的一款强大的集成开发环境,它支持C、C++以及C++/CLI等多种编程语言,尤其在Windows平台上的应用程序开发中占据重要地位。 C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅...
Reflector支持多种编程语言的源代码输出,包括C#、Visual Basic .NET (VB) 和C++/CLI,这为开发人员提供了极大的灵活性。 反编译在软件开发中有多种用途。首先,它是进行逆向工程的重要工具,帮助开发者了解未知库...
GhostDoc是一款广受欢迎的Visual Studio插件,专为提升软件开发效率而设计,特别是对于C#、VB.NET和C++/CLI等支持XML注释的语言。它的主要功能是自动生成符合XML注释标准的文档,这在维护代码质量和提高团队协作效率...
它不仅涵盖了Visual C++ 2010的全部基础知识,而且还详细介绍了标准C++语言和C++/CLI的相关知识。 该书的目标读者是对C++感兴趣的学习者,特别是希望通过Visual C++ 2010来学习和实践C++编程的初学者。 #### 三、...