.net C++/CLI一次性值类

.net C++/CLI一次性值类,.net,c++-cli,dispose,idisposable,value-type,.net,C++ Cli,Dispose,Idisposable,Value Type,C#(值类型)中的Struct可以实现IDisposable,如何在C++/CLI中实现同样的功能 public value class MyStruct : public System::IDisposable { public: // value types cannot contain user-defined special member functions virtual ~MyStruct() { Console::WriteLine("Dis

C#(值类型)中的Struct可以实现IDisposable,如何在C++/CLI中实现同样的功能

public value class MyStruct : public System::IDisposable
{
public:
    // value types cannot contain user-defined special member functions
    virtual ~MyStruct()
    {
        Console::WriteLine("DisposeCalled"); 
    }

    // a finalizer can only be a member of a reference type
    !MyStruct()
    {
        Console::WriteLine("DisposeCalled"); 
    }

    // this method is reserved within a managed class   
    virtual void Dispose()
    {
        Console::WriteLine("DisposeCalled"); 
    }       

    // 'Dispose' is not a member of 'System::IDisposable' (seriously?)
    virtual void DisposeMe() = System::IDisposable::Dispose
    {
        Console::WriteLine("DisposeCalled"); 
    }
};

我的尝试没有一次成功(我一个接一个地尝试过)。删除“virtual”没有帮助。

你不能,C++/CLI规范对此毫无歉意。见ECMA 372,第22.3.4章。您可以继承IDisposable,但编译器会自动生成Dispose(),它将为空。这不是一个损失,值类应该是非常简单的结构,没有复制和处理的特殊语义。@HansPassant:即使结构不应该有一个
Dispose
方法来做任何事情,如果结构本身不需要清理(但接口的其他实现需要清理),那么结构实现继承
IDisposable
的接口有时会很有帮助。@HansPassant你能回答这个问题吗?