作者tomex (tomex_ou)
看板C_Sharp
标题Re: [问题] =Nothing
时间Sat Aug 20 22:44:31 2005
※ 引述《virdust2003 (替机壳洗个热水澡)》之铭言:
: function T()
: {
: frmDialog f = new frmDialog();
: f.ShowDialog();
: f=null;
: }
: 对於 f=null 这行有必要吗?
: 执行完T之後 f 的位址不就自动被清除了,也就没有 东西 指到 new frmDialog()啦~
这理由跟c++中,删除记忆体後,要不要把指标设为NULL呢?
delete *ptr;
ptr = NULL;
设为null的好处,在於下面的code不容易若不小心用到ptr同名称
而造成的bug不会漫天飞扬,死当!! (存取到违法的地方)
所以,把指标设为null是一种c++好习惯啦!
至於c#,只要ref变数超过其scope,就自动被mark入gc且不可视
所以不需要啥都设为null! 而且c#的大物件都会支援dispose等close()方式
来回收资源,而这动作也常常就把ref设为null了!
最重要的是,c#已把指标拿掉了,不小心读取违法记忆体已不见
因此我觉得是不需要设为null了! 除了很重要的物件可设null来让自己清楚不会用错!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.119.52.211
※ 编辑: tomex 来自: 140.119.52.211 (08/20 22:52)