none
请问VC++中使用clr支持,托管对象生命周期问题 RRS feed

  • 问题

  • 刚开始实践C++,原来一直写C#的,想练习一下用VC写,想了解对于托管对象的生命周期如何维护,是不是不需要标准C++的 delete,交给.net的GC自动回收?只有非托管代码,才需要自己去delete?  

    谢谢大家!

    2012年4月18日 5:28

答案

  • JosephChen197701你好!

    托管是.NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,因此我们完全可以把“托管”视为“.NET”。通用语言运行时是.NET 框架应用程序的执行引挚,它提供了许多服务,其中包括:代码管理(装入和执行)、类型安全性验证、元数据(高级类型信息)访问、为管理对象管理内存、管理代码,COM对象和预生成的DLLs(非管理代码和数据)的交互操作性、对开发人员服务的支持等等。也就是说,使用C++托管意味着,我们的代码可以被CLR所管理,并能开发出具有最新特性如垃圾自动收集、程序间相互访问等的.NET框架应用程序。这样,垃圾回收就由CLR所管理,并由垃圾收集器回收。

    在标准C++中,指针是一种非常有效的内置数据类型,常利用其进行堆内存分配,当需要内存时用new操作符在堆空间上开辟一块空间,当所申请内存不再需要时用delete操作符释放掉,相当于一种手动的垃圾回收,借助于new和delete对内存的操作,可以方便地手工管理内存、高效地使用内存。

    希望我的回复对你有所帮助!祝你好运!


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us


    2012年4月19日 6:36

全部回复

  • JosephChen197701你好!

    托管是.NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,因此我们完全可以把“托管”视为“.NET”。通用语言运行时是.NET 框架应用程序的执行引挚,它提供了许多服务,其中包括:代码管理(装入和执行)、类型安全性验证、元数据(高级类型信息)访问、为管理对象管理内存、管理代码,COM对象和预生成的DLLs(非管理代码和数据)的交互操作性、对开发人员服务的支持等等。也就是说,使用C++托管意味着,我们的代码可以被CLR所管理,并能开发出具有最新特性如垃圾自动收集、程序间相互访问等的.NET框架应用程序。这样,垃圾回收就由CLR所管理,并由垃圾收集器回收。

    在标准C++中,指针是一种非常有效的内置数据类型,常利用其进行堆内存分配,当需要内存时用new操作符在堆空间上开辟一块空间,当所申请内存不再需要时用delete操作符释放掉,相当于一种手动的垃圾回收,借助于new和delete对内存的操作,可以方便地手工管理内存、高效地使用内存。

    希望我的回复对你有所帮助!祝你好运!


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us


    2012年4月19日 6:36
  • 谢谢,回答得很详细,我明白了,现在其实只是在用C++基于.Net来写,换种语言而已
    2012年4月19日 10:16