I'm trying to use System.Buffers.MemoryHandle in my C++ CLI code. I don't know to dispose it in order to 'unpin' the underlying memory.
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'
}
I've tried boxing as well, with the same error.
IDisposable^ disposable = handle;
disposable->Dispose(); // error C2039: 'Dispose': is not a member of 'System::IDisposable'
What's the proper way to dispose instances of value types?
As Hans has pointed out in their comments, you can dispose the handle with
delete handle.The Visual Studio will complain that the
expression must have pointer or handle type, but the code will compile and run without problems.