数组和 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
.
我想创建一个 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
.