为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
炎炎设计 2023-05-13 16:10:06
所以我在 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++/命令行界面public ref class ClassA: System::IDisposable {...    ClassA::~ClassA()    {        // Clean up code    }    ClassA::!ClassA()    {        // Clean up code    }}如果这个问题已经得到回答,我深表歉意,但我已经尝试过,但在堆栈溢出时找不到它。
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

Ahhh 找到了原因,即使我在 Visual Studio 中关闭了优化,它也会自动将我的析构函数优化为我在析构函数中进行的第一个函数调用。

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


查看完整回答
反对 回复 2023-05-13
  • 1 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信