我有一个名为"CTransferManaged"的C++/CLI类,带有实现的终结器和析构函数:
CTransferManaged::~CTransferManaged()
{
this->!CTransferManaged();
}
CTransferManaged::!CTransferManaged()
{
//Clean up resources...
}
Run Code Online (Sandbox Code Playgroud)
这个类包含一个名为"CTransfer"的C#类包含一个CTransferManaged类型的对象m_transfer.
如果此类的析构函数只清除对象m_transfer的引用,我可以看到析构函数被调用(命中断点):
~CTransfer()
{
m_transfer = null; //breakpoint on this line
}
Run Code Online (Sandbox Code Playgroud)
如果我调用m_transfer对象的Dispose()函数而不更改其他任何东西,则不再调用析构函数(断点不再命中).任何猜测为什么?
~CTransfer()
{
m_transfer.Dispose(); //breakpoint on this line
m_transfer = null;
}
Run Code Online (Sandbox Code Playgroud)
我想手动调用Dispose(),因为我发现如果我不手动调用Dispose,则不会正确清理C++/CLI对象(m_transfer)的资源.目前我不确切知道为什么.
为什么一旦调用CTransferManaged :: Dispose()(C++/CLI)就不再调用CTransfer(C#类)的析构函数?