加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

visual-c – Visual C无人管理和管理

发布时间:2020-12-16 03:23:17 所属栏目:百科 来源:网络整理
导读:在C中创建.NET对象的实例与托管和非托管之间有什么区别.也就是说,这些声明之间的区别是什么: StreamWriter ^stream = gcnew StreamWriter(fileName); 与 StreamWriter *stream = new StreamWriter(fileName); 我的假设是,如果我使用gcnew,为StreamWriter分
在C中创建.NET对象的实例与托管和非托管之间有什么区别.也就是说,这些声明之间的区别是什么:
StreamWriter ^stream = gcnew StreamWriter(fileName);

StreamWriter *stream = new StreamWriter(fileName);

我的假设是,如果我使用gcnew,为StreamWriter分配的内存将由垃圾收集器管理.或者,如果我使用指针(*)和new关键字,我将不得不调用delete来释放内存.

我真正的问题是:垃圾收集器是否会管理在.NET对象内部分配的内存?例如,如果.NET对象实例化另一个对象,并且它超出范围 – 即使我使用指针(*)和new关键字而不是gcnew和handle(^),垃圾收集器是否会管理该内存.

解决方法

使用gcnew创建对象时,它会绑定到垃圾收集器,垃圾收集器将负责销毁它.

如果您使用new,它将不会绑定到垃圾收集器,您将有责任删除该对象.

只是为了澄清:如果您有一个托管C#对象,其中包含一个非托管对象,则垃圾回收器不会删除非托管对象.它只会在删除之前调用托管对象的析构函数(如果存在).您应该在析构函数中编写自己的代码以删除您创建的非托管对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读