【发布时间】:2011-09-14 19:42:02
【问题描述】:
这与this question 非常相似,但答案并没有真正回答这个问题,所以我想我再问一遍:
有时我会与返回可变长度结构的函数进行交互;例如,Windows 中的FSCTL_GET_RETRIEVAL_POINTERS 返回一个可变大小的RETRIEVAL_POINTERS_BUFFER 结构。
在 C++ 中不鼓励使用 malloc/free,所以我想知道:
在标准 C++ 中分配可变长度缓冲区的“正确”方法是什么(即没有 Boost 等)?
vector<char> 是类型不安全的(如果我理解正确,不保证任何对齐),new 不适用于自定义大小的分配,我可以'想不出一个好的替代品。有什么想法吗?
【问题讨论】:
-
我不明白你的结构中有一个
std::vector<WHATEVER>的数据成员有什么问题。 -
@Oli:在 my 结构中?它已经由 Windows 定义,而不是由我定义...
-
"
vector<char>是类型不安全的" ...怎么会这样? -
@Mehrdad:哦,我明白了。我以为你只是用 Windows 的例子来说明如何在 C 中完成。
-
@AJG85:它没有告诉我它拥有
RETRIEVAL_POINTERS_BUFFER结构这一事实,因此它显然是类型不安全的。
标签: c++ struct size new-operator