C++托管到底是什么

开发 后端
C++托管的使用,就意味着我们可以通过CLR来管理我们的代码,进行自动操作,来帮助我们大大提高程序开发效率。

C++编程语言从发展至今已经历经20年之久,我们在下面首先介绍了这一编程语言的基本概念以及构成。在大家了解完这些内容后,我们会进入近体那的主题,那就是为大家介绍什么事C++托管?#t#

C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。

根据Effective C++第三版第一条款的描述,现在C++由以下四个“子语言”组成:

1、C子语言。C++支持C语言的几乎全部功能,在语法上与C语言仅有极微妙的差别(如括号表达式的左右值性,具体请参考C++标准文献)。

2、面向对象的C++。C++首先作为一门面向对象的语言而闻名,这个特点在这里不再详述。

3、泛型编程语言。C++强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。

4、STL(C++标准模板库)。随着STL的不断发展,它已经逐渐成为C++程序设计中不可或缺的部分,其效率可能比一般的naive代码低些,但是其安全性与规范性使它大受欢迎。

在回答这个问题,首先要搞清楚什么是“托管”(Managed)。托管是.NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,因此我们完全可以把“托管”视为“.NET”。那么什么是“通用语言运行时”?通用语言运行时是.NET 框架应用程序的执行引挚。它提供了许多服务,其中包括:代码管理(装入和执行)、类型安全性验证、元数据(高级类型信息)访问、为管理对象管理内存、管理代码,COM对象和预生成的DLLs(非管理代码和数据)的交互操作性、对开发人员服务的支持等等。

也就是说,使用C++托管意味着,我们的代码可以被CLR所管理,并能开发出具有最新特性如垃圾自动收集、程序间相互访问等的.NET框架应用程序。

由托管概念所引发的C++应用程序包括托管代码、托管数据和托管类三个组成部分。

(1) 托管代码:.Net环境提供了许多核心的运行(RUNTIME)服务,比如异常处理和安全策略。为了能使用这些服务,必须要给运行环境提供一些信息代码(元数据),这种代码就是托管代码。所有的C#、VB.NET、JScript.NET默认时都是托管的,但Visual C++默认时不是托管的,必须在编译器中使用命令行选项(/CLR)才能产生托管代码。

(2) 托管数据:与托管代码密切相关的是托管数据。托管数据是由公共语言运行的垃圾回收器进行分配和释放的数据。默认情况下,C#、Visual Basic 和 JScript.NET 数据是托管数据。不过,通过使用特殊的关键字,C# 数据可以被标记为非托管数据。Visual C++数据在默认情况下是非托管数据,即使在使用 /CLR 开关时也不是托管的。

(3) 托管类:尽管Visual C++数据在默认情况下是非托管数据,但是在使用C++托管扩展时,可以使用“__gc”关键字将类标记为托管类。就像该名称所显示的那样,它表示类实例的内存由垃圾回收器管理。另外,一个托管类也完全可以成为 .NET 框架的成员,由此可以带来的好处是,它可以与其他语言编写的类正确地进行相互操作,如托管的C++类可以从Visual Basic类继承等。但同时也有一些限制,如托管类只能从一个基类继承等。需要说明的是,在C++托管应用程序中既可使用托管类也可以使用非托管类。这里的非托管类不是指标准C++类,而是使用托管C++语言中的__nogc关键字的类。

责任编辑:曹凯 来源: 博客园
相关推荐

2017-10-11 08:51:13

2011-04-27 09:30:48

企业架构

2020-10-14 06:22:14

UWB技术感知

2020-09-27 06:53:57

MavenCDNwrapper

2010-11-01 01:25:36

Windows NT

2020-09-22 08:22:28

快充

2010-04-22 14:14:29

Live-USB

2021-09-03 09:12:09

Linux中断软件

2019-10-30 10:13:15

区块链技术支付宝

2020-08-04 14:20:20

数据湖Hadoop数据仓库

2013-06-09 09:47:31

.NetPDBPDB文件

2024-07-03 12:04:42

C++this​

2021-01-21 21:24:34

DevOps开发工具

2021-07-07 05:07:15

JDKIterator迭代器

2021-09-01 23:29:37

Golang语言gRPC

2023-07-12 15:32:49

人工智能AI

2024-02-04 00:01:00

云原生技术容器

2020-03-05 10:28:19

MySQLMRR磁盘读

2022-10-08 00:00:00

Spring数据库项目

2021-02-05 10:03:31

区块链技术智能
点赞
收藏

51CTO技术栈公众号