这是我的情况:
我在 C++/CLI 层中有 .NET 包装对象,它保存指向非托管 C++ 对象的指针。我已经实现了终结器,以便它删除垃圾收集上的包装对象指向的非托管内存并将指针设置为空。
这是问题所在:
我正在查看 .NET 包装器对象的终结器,它被调用两次并尝试两次删除相同的内存,这表明我以某种方式创建了 2 个超出范围的 .NET 包装器对象,并且被垃圾收集虽然我仍然希望包装器对象在范围内(这些包装器对象正在传递给 VB.NET 应用程序)。
这是我的问题:
无论如何我可以检查句柄值,以便我可以确认包装对象的创建位置(复制或其他)?目前我正在查看句柄值(EG - 0x0014fe80),但我看到创建对象、添加到集合和删除对象时的 3 个不同值。所以我不确定GC是否只是在移动东西并且这是同一个对象,或者我是否真的看到3个不同的对象引用了相同的非托管内存。如果可能的话,我想解决重复的对象副本,但我知道我可能想要实现某种智能指针,这样就不会发生这种情况。
谢谢,伊恩