【发布时间】:2010-12-28 23:12:21
【问题描述】:
我在 c# dll 中有一个托管对象,它维护一个匿名整数句柄,该句柄指向 c++ dll 中的非托管对象。在 c++ dll 中,匿名整数在 std::map 中用于检索非托管 c++ 对象。通过这种机制,我可以使用匿名整数句柄在托管对象和非托管对象之间保持松散的关联。
在托管对象的 finalize 方法(析构函数)中,我调用了非托管 dll 来删除非托管对象。
c# 程序运行时一切正常,但程序退出时出现问题。因为我无法控制托管端的删除操作顺序,所以在任何托管对象之前从内存中删除非托管 dll。因此,当托管对象的析构函数被调用(反过来调用非托管析构函数[至少间接地])时,非托管对象已经被删除并且程序崩溃了。
那么,如何安全地删除与 c# 程序中的托管对象相关联的外部 c++ dll 中的非托管对象。
谢谢
安德鲁
【问题讨论】:
标签: c# c++ unmanaged destructor managed