[英]How unmanaged object is destroyed/collected in C#
這是一個場景:
在托管c ++ dll中定義了一個類,並在C#項目中使用了該類。
public ref class AClass {
// ......
XParameters m_oParams;
property XParameters^ Parameters {
XParameters^ get() { return m_oParams; }
}
}
XParameters是C#端可見的另一個托管的c ++定義的類。
C#代碼如下所示:
var aClass = new AClass();
var oParams = aClass.Parameters;
aClass = null;
實際上,我想保證在將null分配給aClass
對象本身后, oParams
會變為null。 有辦法嗎?
調用aClass = null
時會發生什么?
“當aClass = null
時到底會發生什么?”: aClass
變為null
,並且如果aClass
引用的對象是對對象的最后引用,則該對象才有資格使用GC(但這是隱式的效果-現在沒有對GC的標記) ”)。
有沒有辦法讓對象知道什么時候變得適合GC(因為它是隱含動作),還是以實例的引用改為空/其他物體。 因此,沒有辦法“保證在我為aClass分配null之后,oParams會變為null”。
當aClass = null
,它現在是一個null引用。 它不會改變oParams。 在C#中,使用后無需將對象設置為null。
在這種情況下,最好將代碼包裝為使用狀態。
using (var aClass = new AClass()){
var oParams = aClass.Parameters;
//do stuff
};//object is disposed
如果將代碼包裝在try..finally
或using()
塊中,則該對象上的finalizer方法應為您調用Dispose()
。
可以在以下位置找到有關C#中內存管理的良好資源: http : //codebetter.com/karlseguin/2008/04/28/foundations-of-programming-pt-7-back-to-basics-memory/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.