如何处理一个值类型的实例在c++ CLI?



我试图在我的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()。根据微软文档:

解除固定内存,以便垃圾收集器可以自由移动它。

最新更新