如何正确清理 Vulkan 对象?

How to properly clean Vulkan objects?

VkObjects 是否需要清空,或者是否以某种方式自动解决?

VkBuffer _buffer;

和这样的析构函数:

Buffer::~Buffer()
{
  vkDestroyBuffer(_device.getLogicalDevice(), _buffer, nullptr);
  if(_memory) {
    vkFreeMemory(_device.getLogicalDevice(), _memory, nullptr);
  }
}

调用析构函数后,是否需要设置_buffer为VK_NULL_HANDLEnullptr 或者没有必要,这是自动完成的?

(基本上我的问题是,如果规范在调用 vkDestroyXYZ / vkFreeXYZ 后处于哪个状态,则对象实例)

如果是,它适用于所有 VkObject(如 VkInstanceVkImage 等)还是有一些例外?

我认为如果我让对象保持原样(尤其是当它立即被销毁时)我会很好,但是我们在代码审查期间进行了讨论,可以说,我的审查者已经设置了 -pedantic和 -Wall 为了我们的代码库,我必须承认 :)

当您(正确地)销毁了一个 Vulkan 对象时,它就会被销毁。这就是它的结束。这与通过指针销毁 C++ 中的对象没有什么不同:指向的对象 gone.

您如何处理指针值本身取决于您(除了将其值作为输入传递给 Vulkan API,您当然不能这样做)。