我有一个 C# 对象,它可用于如下所示的资源:
public sealed class CLoadingScope
{
private bool isDisposed;
public CLoadingScope()
{}
~CLoadingScope()
{
// must be disposed otherwise it is used incorrectly
if (!isDisposed)
{
throw new ApplicationException("RAII object has not been disposed");
}
}
public void Dispose()
{
// CLEANUP CODE HERE […]
isDisposed = true;
GC.SuppressFinalize(this);
}
};
我在一些 C++/CLI 代码中使用它,如下所示:
{
CLoadingScope scope;
// CODE THAT USES THE RESSOURCE HERE […]
}
但这会导致抛出异常。我期待这会起作用,因为 Dispose 是 C# 类的析构函数,堆栈对象在其作用域结束时被销毁。至少我是这样解释这个问题的答案的。由于 C#、C++ 和 C++/CLI 中终结器和析构函数的所有命名和使用混淆,我假设我混淆了一些东西。谁能告诉我什么?:)