
StreamWriter ^stream = gcnew StreamWriter(filename);
与
StreamWriter *stream = new StreamWriter(filename);
我的假设是,如果我使用gcnew,为StreamWriter分配的内存将由垃圾收集器管理.或者,如果我使用指针(*)和new关键字,我将不得不调用delete来释放内存.
我真正的问题是:垃圾收集器是否会管理在.NET对象内部分配的内存?例如,如果.NET对象实例化另一个对象,并且它超出范围 – 即使我使用指针(*)和new关键字而不是gcnew和handle(^),垃圾收集器是否会管理该内存.
解决方法 使用gcnew创建对象时,它会绑定到垃圾收集器,垃圾收集器将负责销毁它.如果您使用new,它将不会绑定到垃圾收集器,您将有责任删除该对象.
只是为了澄清:如果您有一个托管C#对象,其中包含一个非托管对象,则垃圾回收器不会删除非托管对象.它只会在删除之前调用托管对象的析构函数(如果存在).您应该在析构函数中编写自己的代码以删除您创建的非托管对象.
总结以上是内存溢出为你收集整理的visual-c – Visual C无人管理和管理全部内容,希望文章能够帮你解决visual-c – Visual C无人管理和管理所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)