Ben uygulanan sonlandırıcıyı ve yoketme ile "CTransferManaged" adlı bir C++/CLI sınıf var kullanılırsa çağrılmaz Yokedici "CTransfer", CTransferManaged türünde bir m_transfer nesnesi oluşturur.C#/CLI:</p> Bu sınıf, bir C# sınıfı ile sarılır <pre><code>CTransferManaged::~CTransferManaged() { this->!CTransferManaged(); } CTransferManaged::!CTransferManaged() { //Clean up resources... } </code></pre> <p>adlı: Dispose() o
bu sınıfın yıkıcı sadece ben yıkıcı adlı (kesme vurduğunuzda) görebiliriz m_transfer nesnesine başvuru temizler edin:
~CTransfer()
{
m_transfer = null; //breakpoint on this line
}
Ben m_transfer bertaraf edin() işlevini çağırırsanız Başka bir şey değiştirmeden nesne, artık yok denir (kesme noktası daha fazla isabet). Herhangi bir tahmin neden?
~CTransfer()
{
m_transfer.Dispose(); //breakpoint on this line
m_transfer = null;
}
ben elle imha çağrı yoksa C++/CLI nesnesi (m_transfer) kaynakları düzgün temizlediğini değil öğrendim elle beri) Dispose (çağırmak istiyorum. Şu anda tam olarak nedenini bilmiyorum.
CTransferManaged :: Dispose() (C++/CLI) çağırır durmaz CTransfer (C# sınıfı) yıkıcısı neden çağrılmaz?
CTransfer sınıfınız *, * m_transfer üyesini uygun şekilde imha edebilmesi için IDisposable kullanmalıdır. Yaptığın gibi görünüyor. ** ** CTransfer için bir finalizer uygulamayın. Bir üyeyi null olarak ayarlamak yararlı bir etkiye sahip değildir ve onun Dispose() yöntemini çağırmak yanlıştır. –
@HansPassant: CTransfer'in sonleştiricisi içinde bir üye nesnenin (m_transfer) Dispose() yöntemini çağırmak neden yanlış? Daha önce de belirttiğim gibi, m_transfer kaynaklarının Dispose() üzerinde aramadığımda düzgün temizlenmediğini öğrendim (
obruend