如何在 C++ CLI 中处理值类型的实例?

How to dispose an instance of a value type in C++ CLI?

我正在尝试在我的 C++ CLI 代码中使用 System.Buffers.MemoryHandle。我不知道为了 'unpin' 底层内存而处置它。

void f(System::Memory<int> memory) {
    System::Buffers::MemoryHandle handle = memory.Pin();
    void* pointer = handle.Pointer; 

    // Work with the pointer

    handle.Dispose(); // error C2039: 'Dispose': is not a member of 'System::Buffers::MemoryHandle'
}

我也试过拳击,同样的错误。

IDisposable^ disposable = handle;
disposable->Dispose(); // error C2039: 'Dispose': is not a member of 'System::IDisposable'

处理值类型实例的正确方法是什么?

您必须在 MemoryManager 上致电 Unpin()。根据 Microsoft documentation:

Unpins pinned memory so that the garbage collector is free to move it.

正如 Hans 在他们的评论中指出的那样,您可以使用 delete handle 处理句柄。

Visual Studio 会抱怨 expression must have pointer or handle type,但代码会编译并且 运行 没有问题。