【发布时间】:2021-04-02 20:16:53
【问题描述】:
首先,我用独特的句柄在 vulkan-hpp 中重写了 Vulkan 教程三角形。关闭程序时,我得到以下断言:Assertion: m_dispatch && m_owner 查看代码,我发现启用 VULKAN_HPP_NO_EXCEPTIONS 会修复它,但现在我收到此错误:
vk::UniqueHandle<:commandbuffer> &vk::UniqueHandle<:commandbuffer>::operator =(const vk::UniqueHandle<:commandbuffer ::dispatchloaderstatic> &)': 试图引用已删除的函数
这是我的代码:
std::tie(res, commandBuffers) = device->allocateCommandBuffersUnique(allocInfo);
正确的使用方法是什么?
device->allocateCommandBuffersUnique();
【问题讨论】:
-
它是独一无二的对象。试试
std::move。或auto cmdbuffs = device->allocateCommandBuffersUnique(allocInfo);。那应该是一个移动构造函数。 -
你能更精确一点吗?因为我在执行 cmdbuffsf = device->allocateCommand 时遇到错误... 那么如何使用 std::move 呢?
-
ResultValue是一个结构,而不是一个元组,所以我怀疑std::tie是否可以工作。 -
好的,那么使用 std::move 的正确方法是什么?
-
我避免使用
vulkan.hpp完全是为了这个废话。也许最好坚持samples,尽管他们使用有点不同的风格。无论如何,我认为移动构造应该可以工作:auto cmdbuffs = device->allocateCommandBuffersUnique(allocInfo);。移动分配可能需要明确提示:cmdbuffs = std::move(device->allocateCommandBuffersUnique(allocInfo) );。请注意,我没有测试过这些;那里需要一些实验,而且 Vulkan-Hpp 文档有点缺乏。