托管C++和C++的区别

53
第二个问题是:我何时使用这两者中的哪一个?

我认为你应该看一下这个问题 - GSerg
1
Managed Extensions for C++ 或者叫做 Managed C++ 是微软现已弃用的一组 C++ 偏差,包括语法和语义扩展、关键字和属性,以将 C++ 语法和语言引入 .NET Framework。这些扩展允许将 C++ 代码作为托管代码以及继续与本机代码进行交互,从而将其定位到公共语言运行时(CLR)。Managed C++ 不是一个完整的独立或全面的编程语言。https://en.wikipedia.org/wiki/Managed_Extensions_for_C%2B%2B#.E2.80.A6to_C.23 - NoWar
5个回答

75

当没有指定时,C++是非托管的C++,编译成机器代码。在非托管的C++中,您必须手动管理内存分配。

Managed C++是由微软发明的语言,它编译为由.NET Framework运行的字节码。它与C++大部分使用相同的语法(因此得名),但编译方式与C#或VB.NET相同;基本上只有语法改变,例如使用“->”来指向对象的成员(而不是在C#中使用“.”),使用“::”表示名称空间等。

Managed C++旨在简化从传统C++转移到.NET Framework的过程。它并不打算用于启动新项目(首选C#)。


1
对于不要在新项目中使用托管C++的建议需要注意。从Visual Studio 2008开始,托管C++具有某些优于C#的功能。这些功能与IDisposable对象的处理有关。请参见http://msdn.microsoft.com/en-us/library/ms235315.aspx。 - morechilli
24
"Managed C++"和"C++/CLI"是两个不同的东西。 "Managed C++"是对C++的可怕扩展,本不应该出现。而"C++/CLI"则是一种官方分开的语言,因此可以添加新关键字,并且使用起来更加舒适。 - Eclipse
C++/CLI 是托管的还是非托管的? - Kyle Delaney
2
@KyleDelaney C++/CLI是托管的。 - Laurent
1
与普遍观念相反,托管 C++ 并不会编译成字节码,而是生成混合模式可执行文件,根据使用的对象切换字节码和本机代码。如果没有使用任何“不安全”的 C++ 特性(如 CRT 或 STL 中的任何一个),则可以使用 C++/CLI 创建纯托管可执行文件。 - rustyx

14

"Managed C++" 是指包含在 Visual Studio.NET/Visual Studio.NET 2003 中的一种语言。它自那时起已被弃用,最新的.NET C++是C++/CLI。


3
你可以用两种不同的方式编写本地C++代码。第一种是直接将代码编译为机器码,只需在平台(硬件)和操作系统之间进行。第二种本地编码是使用MFC(Microsoft Foundation Classes)。除了使用MFC外,这与第一个示例相同。
管理C++使用CLR(Common Language Runtime)。CLR与.NET框架类库一起组成.NET Framework。此托管C++/CLI标准使用.NET框架以及CIL(Microsoft Intermediate Language)。该标准通过仅在程序执行时使用即时编译器将代码映射到机器码。如果您的代码将在不同的硬件平台上运行,则使用托管代码会更加容易。就像所有事物一样,方便性需要付出一些代价,因为本地代码将运行得更快。

1
当您想要从托管代码中使用本机C++类库时,您将使用托管C++。在这种情况下,您需要将非托管类包装在托管C++类中,然后可以在任何CLR语言中使用它们。

0

Managed C++ 意味着内存分配、管理和垃圾回收由虚拟机处理。而在“常规”的 C++ 中,您需要分配和释放内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接