因此,我在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
}
}
如果这个问题已经回答了,我很抱歉,但我已经尝试过了,但在堆栈溢出时找不到它。
发布于 2019-06-29 00:30:48
啊哈找到了原因,原来即使我在Visual Studio中关闭了优化,它还是自动优化了我的析构函数,使其成为我在析构函数中调用的1个函数。
因此,即使断点看起来有效,我也必须在我的另一个函数中放置一个断点来获取调用堆栈。(有趣的是调用堆栈直接从Dispose(bool)转到我的函数,并跳过析构函数)
https://stackoverflow.com/questions/56796685
复制相似问题