【发布时间】:2015-10-05 12:28:42
【问题描述】:
所以我想让我的 C++ 代码决定何时销毁托管对象。 (因为它们作为委托传递给它,以便在 C++ 附带事件上调用)。
我有一个简单的对象结构:EventGenerator + Delegates。
在我的托管方面,我有一个 EventGenerator 的包装器和一个 Delegates 接口的包装器,我从中(使用%feature("director"))创建托管委托。在我的 C++ 代码中,我使用 shared_pointers 来让委托保持活跃。我使用了 SWIG 功能 shared_ptr。
只要 EventGenerator 还活着,我就需要我的托管 Delegates 还活着。然而 GC 并不知道 EventGenerator 和 Delegates 之间的连接。
但我不想知道对象何时在 C# 方面被销毁 - 我想允许 C++ 方面进行控制(使用 shared_ptr's)。
那么应该如何处理 SWIG 共享指针以使其能够在他管理的方面维持其自身?
我发现的唯一解决方案是在 C# 端扩展 EventGenerator 对象,以便向其添加委托会将该委托添加到列表中。它有效,但我希望有更好的解决方案。
有没有办法使用共享指针引用计数器来制作 SWIG 帐户? (这样委托只会在其 C++ 主机死亡后在托管代码中被销毁?)
【问题讨论】:
标签: c# c++ delegates swig shared-ptr