我有一个名为“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) 时不再被调用?