因此,我在C#对象中拥有一个C ++ / CLI对象。我在C ++ / CLI对象上调用dispose,并且在C ++ / CLI析构函数和终结器中都有一个断点。
我知道.NET应该自动为CLI对象生成一个Dispose并将析构函数放在其中,但是我在析构函数中的断点只是没有被击中。有人可以解释一下发生了什么事,因为我无法找到有关此行为的任何文档。
C#
public void Dispose()
{
foreach (var wrapper in m_items)
{
var disposable = wrapper.Data as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
}
C ++ / CLI
public ref class ClassA: System::IDisposable {
...
ClassA::~ClassA()
{
// Clean up code
}
ClassA::!ClassA()
{
// Clean up code
}
}
对于这个问题是否已经回答,我深表歉意,但是我已经尝试过并且在堆栈溢出时找不到它。
答案 0 :(得分:0)
Ahhh找出了原因,即使我在Visual Studio中没有进行优化,它也会将我的Destructor自动优化为我在Destructor中进行的1函数调用。
因此,即使断点看起来有效,我也必须在其他函数中放置一个断点才能获取调用堆栈。 (有趣的是,调用栈直接从Dispose(bool)转到了我的函数,并且跳过了析构函数)