如何解决如何在 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
,但代码编译和运行时没有问题。
您必须在 Unpin()
上调用 MemoryManager
。根据{{3}}:
取消固定内存,以便垃圾收集器可以自由移动它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。