C++ C++;03向量作为缓冲类
这是非常普遍的情况:C++ C++;03向量作为缓冲类,c++,arrays,vector,C++,Arrays,Vector,这是非常普遍的情况: int checkSomething() { char *buff = new char[SOMTHING_SIZE]; int ret = 0; fillSomething(buff); /// Check data in buff and set ret value. ... /// delete [] buff; return ret; } 我认为使用vector(对于开发人员)会更安全: int ch
int checkSomething() {
char *buff = new char[SOMTHING_SIZE];
int ret = 0;
fillSomething(buff);
/// Check data in buff and set ret value.
...
///
delete [] buff;
return ret;
}
我认为使用vector(对于开发人员)会更安全:
int checkSomething() {
std::vector<char> buff(SOMETHING_SIZE);
int ret = 0;
fillSomething(&buff[0]);
/// Check data in buff and set ret value.
...
///
return ret;
}
int checkSomething(){
std::向量buff(大小);
int-ret=0;
填充某物(&buff[0]);
///检查buff中的数据并设置ret值。
...
///
返回ret;
}
它可以防止在调用delete之前从函数返回时出现这种情况
问题:使用向量的缺点是什么?我看到了很多使用new
/delete
的代码,在那里使用std::vector
很容易
使用向量的缺点是什么?我看到了很多使用new/delete的代码,这些代码很容易使用vector
使用std::vector
实际上没有缺点
我认为使用vector(对于开发人员)会更安全
你说得对。它只是被设计成用原始数组指针来替代这个功能,并且至少任何适当的实现都需要按照std::vector实现的大小和重新分配来做(这可能很难避免所有潜在的陷阱)
<> P>在C++实现中很容易得到<代码>新[]/Cux>代码> Dele[][C]/COD>错误,但是很难失败,<>代码> STD::vector < /代码>这就是它从C++标准定义的开始存在的原因。
在当前标准下,如果缓冲区应该静态分配在堆栈上并且适合堆栈,那么假设
某物大小
是一个常量,那么std::array
甚至应该是首选
使用向量的缺点是什么?我看到了很多使用new/delete的代码,这些代码很容易使用vector
使用std::vector
实际上没有缺点
我认为使用vector(对于开发人员)会更安全
你说得对。它只是被设计成用原始数组指针来替代这个功能,并且至少任何适当的实现都需要按照std::vector实现的大小和重新分配来做(这可能很难避免所有潜在的陷阱)
<> P>在C++实现中很容易得到<代码>新[]/Cux>代码> Dele[][C]/COD>错误,但是很难失败,<>代码> STD::vector < /代码>这就是它从C++标准定义的开始存在的原因。
在当前标准下,如果缓冲区应该静态地分配在堆栈上,并且适合堆栈,并且假定
SOMETHING\u SIZE
是一个常量,那么std::array
应该是首选的。这里的区别是std::vector
将释放其元素占用的内存,然而,您必须手动删除
动态分配的数组,而您恰好以错误的方式执行此操作-应该有删除[]
而不是删除
,因为您正在解除分配的是一个数组
不要忘记取消分配,以防您的函数提前返回/抛出异常可能会很麻烦。我们已经有了雷伊
事实上,
std::array
如果在编译时知道something\u SIZE
,那么它也可以为您服务(可能使用较小的二进制文件)。这里的区别是std::vector
将释放其元素占用的内存,而您必须手动删除动态分配的数组,您碰巧做得不对-应该有delete[]
而不是delete
,因为您正在释放的是一个数组
不要忘记取消分配,以防您的函数提前返回/抛出异常可能会很麻烦。我们已经有了雷伊
事实上,std::array
如果在编译时知道SOMTHING\u SIZE
的话,它也可以为您服务(使用可能更小的二进制文件)
我认为使用vector(对于开发人员)会更安全
你说得对
使用向量的缺点是什么
没有
我看到了很多使用new/delete的代码,这些代码很容易使用vector
是的,世界上有很多可怕的代码
我认为使用vector(对于开发人员)会更安全
你说得对
使用向量的缺点是什么
没有
我看到了很多使用new/delete的代码,这些代码很容易使用vector
是的,世界上有很多可怕的代码。我想指出中间解决方案,它的作用更像原始的新[]
…删除[]
,但它是安全的(不需要记住解除分配,在出现异常时不会泄漏)
即:
std::unique_ptr<char[]> buff{new char[SOMETHING_SIZE]};
std::unique_ptr buff{new char[SOMETHING_SIZE]};
或
auto buff=std::使_唯一(某物大小);
它具有在运行时选择的大小(不同于std::array
)
它不允许调整大小或复制。如果您想要这些,应该向上移动到std::vector
。但有时您并不需要它们,而且std::unique\u ptr
节省了std::vector
跟踪不同大小所需的额外开销
请注意,这些都是在C++11(和C++14,用于make_unique
)中标准化的,但也可以在C++03中构建。我想指出中间解决方案,它的作用更像原始的new[]
…delete[]
,但它是安全的(不要求您记住解除分配,在出现异常时不会泄漏)
即:
std::unique_ptr<char[]> buff{new char[SOMETHING_SIZE]};
std::unique_ptr buff{new char[SOMETHING_SIZE]};
或
auto buff=std::使_唯一(某物大小);
它具有在运行时选择的大小(不同于std::array
)
它不允许调整大小或cop