首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中调用Dispose时未调用C++/CLI析构函数

在C#中调用Dispose时未调用C++/CLI析构函数
EN

Stack Overflow用户
提问于 2019-06-28 02:16:08
回答 1查看 188关注 0票数 0

因此,我在C#对象中保存了一个C++/CLI对象。我在我的C++/CLI对象上调用dispose,并且在C++/CLI析构函数和终结器中都有断点。

我知道.NET应该自动为CLI对象生成Dispose,并将析构函数放在其中,但析构函数中的断点就是没有命中。有人能给我解释一下这是怎么回事吗,因为我找不到任何关于这种行为的文档。

C#

代码语言:javascript
运行
复制
public void Dispose()
{
    foreach (var wrapper in m_items)
    {
        var disposable = wrapper.Data as IDisposable;
        if (disposable != null)
        {
            disposable.Dispose();
        }
    }
}

C++/CLI

代码语言:javascript
运行
复制
public ref class ClassA: System::IDisposable {
...
    ClassA::~ClassA()
    {
        // Clean up code
    }

    ClassA::!ClassA()
    {
        // Clean up code
    }
}

如果这个问题已经回答了,我很抱歉,但我已经尝试过了,但在堆栈溢出时找不到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-29 00:30:48

啊哈找到了原因,原来即使我在Visual Studio中关闭了优化,它还是自动优化了我的析构函数,使其成为我在析构函数中调用的1个函数。

因此,即使断点看起来有效,我也必须在我的另一个函数中放置一个断点来获取调用堆栈。(有趣的是调用堆栈直接从Dispose(bool)转到我的函数,并跳过析构函数)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56796685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档