我试图在我的c++ CLI代码中使用System.Buffers.MemoryHandle
。我不知道为了"解锁"底层内存而处理它。
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'
处理值类型实例的正确方法是什么?
正如Hans在他们的评论中指出的那样,您可以使用delete handle
来处置句柄。
Visual Studio将抱怨expression must have pointer or handle type
,但代码将编译和运行没有问题。
您必须在MemoryManager
上调用Unpin()
。根据微软文档:
解除固定内存,以便垃圾收集器可以自由移动它。