数组和 DirectX API

Arrays and DirectX API

我想创建一个 D3D11_INPUT_ELEMENT_DESC 的数组以传递给 CreateInputLayout 函数。

在我自己的程序中,我使用向量来构建和存储 D3D11_INPUT_ELEMENT_DESC。

知道 DirectX API 不接受向量,我应该如何创建一个可以传递给 DirectX 的动态大小的数组?

如果您使用 new ANYTYPE[] 分配数组,则必须使用 delete [] 删除数组。

有人可能会争辩说,当数组元素没有析构函数时,[] 在某些 C++ 编译器中不是必需的。但是你应该让编译器来做这个决定。

如果您想通过添加或删除元素来更改数组的大小,您应该使用 std::vector class 模板。

在 C++ 中,您可以(大多数情况下)因此应该避免 直接 处理动态内存分配 and/or 释放,因为库通过容器 and/or 提供了适当的支持 类(std::vector 等)和 std::unique_ptr。不自己直接处理这个有很大的好处,你的代码不太可能遭受内存泄漏、悬空指针(尽管这里需要一些小心),并且应该是异常安全的。

然而,偶尔,你必须使用一个不了解 C++ 之美而只接受原始指针的 API。通常,这是访问 C 风格的数据数组及其大小,即

void C_style_func(void  *ptr_to_first_object,   // observing pointer
                  size_t sizeof_object,
                  size_t number_of_objects);

你当然可以将std::vector的元素传递给这样的函数

std::vector<some_type> my_vec;
/* ... fill vector */
C_style_func(my_vec.data(), sizeof(some_type), my_vec.size());

这种用法的唯一潜在问题是,如果 C_style_func 记住它的第一个参数供以后使用,比如说,同一个库的另一个函数 and 你改变例如,通过删除或更改 std::vector my_vec.