将 const char** 转换为 std::vector<const char *>

Conversion of const char** to std::vector<const char *>

我目前正在开发一个 Vulkan 项目,该项目使用 glfw 库进行 window 处理。

要获得所需的扩展,glfw 提供了 const char** glfwGetRequiredInstanceExtensions(uint32_t *count)

为了避免将 const char** 与计数一起传递,我编写了一个简单的辅助函数,将 const char** 转换为 std::vector:

std::vector<const char *> GetRequiredInstanceExtensions()
{
    uint32_t extensionCount = 0;
    auto extensions = glfwGetRequiredInstanceExtensions(&extensionCount);

    return std::vector<const char *>(extensions, extensions + extensionCount);
}

我不确定这在内存方面是如何工作的。据我了解,数据被复制到此处的向量中。我不确定我是否必须清理从 glfwGetRequiredInstanceExtensions 返回的 const**,以及通常使用 std::vector 是否合适。如果我没记错的话,当向量超出范围时,它只是清理指针而不是整个 c 字符串。

我这里有内存泄漏吗?

来自 glfwGetRequiredInstanceExtensions() 上的 Vulkan docs

Pointer lifetime

The returned array is allocated and freed by GLFW. You should not free it yourself. It is guaranteed to be valid only until the library is terminated.

所以你完全不用担心内存问题。 std::vector 会自行清理,Vulkan 也会。

Do i have memory leaks here?

每当你需要问自己,“我需要释放这个裸指针吗”,答案应该在文档中找到。在这种情况下:

Pointer lifetime

The returned array is allocated and freed by GLFW. You should not free it yourself. It is guaranteed to be valid only until the library is terminated.

所以不,你不会在这里泄漏内存。