微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在 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 举报,一经查实,本站将立刻删除。