我有一个名为“CTransferManaged”的C++/CLI类,其中实现了终结器和析构函数:
CTransferManaged::~CTransferManaged()
{
this->!CTransferManaged();
}
CTransferManaged::!CTransferManaged()
{
//Clean up resources...
}
这个类被包装在一个名为“CTransfer”的C#类中,该类包含一个类型为CTransferManaged的对象m_transfer。
如果这个类的析构函数只清除了对对象m_transfer的引用,我可以看到析构函数被调用(断点被命中):
~CTransfer()
{
m_transfer = null; //breakpoint on this line
}
如果我调用m_transfer对象的Dispose()函数而不改变任何其他东西,析构函数就不再被调用(断点不再被命中)。有什么猜测原因吗?
~CTransfer()
{
m_transfer.Dispose(); //breakpoint on this line
m_transfer = null;
}
我希望手动调用Dispose(),因为我发现如果不手动调用Dispose(),C++/CLI对象(m_transfer)的资源无法正确清理。目前我不知道原因。
为什么当CTransfer(C#类)调用CTransferManaged::Dispose()(C++/CLI)时,它的析构函数不再被调用?