如果我需要二进制缓冲区对象,
就像TCP/UDP通讯一样,
在c++中,我会以什么为基础呢?
vector<unsigned char>?std::string?-- std::字符串可以容纳0字节,这与流行的观点相反,因此可以用来保存二进制数据。new char[]?malloc()?有人看到用于二进制缓冲区的std::向量了吗?
我没看见。为什么?表演?
我确实看到malloc()经常用于二进制缓冲区。
在C++中。有人能确认吗?解释?
谢谢
发布于 2011-08-05 07:28:03
二进制缓冲区可以被看作是存储一些非结构化信息的内存块。从这个意义上说,使用新的char[]和malloc是完全等价的,IMO,因为它们给了您一段内存和一个指向它的指针。
使用std::vector是另一回事;除了成本之外,我不认为这是相关的,因为您将使用
&vect[0]要像对malloc一样访问底层缓冲区,它有其优点,比如缓冲区扩展性和比直接指针更安全的访问;您可以读取在这里讨论。我自己也曾在一个项目中使用过。
std::string在原则上存在C++ (98,03)标准不能保证底层缓冲区的连续性的问题,但这似乎并不是编译器实现的问题。C++0x似乎具有标准化的缓冲区连续性(但我并没有专门搜索它)。因此,您也可以使用它们,但可以在赫伯·萨特的评论之前阅读(它不是在正文中,而是在文章末尾的第三条评论中)。
无论如何,在std::string和std::vector之间,我会选择std::vector。
发布于 2011-08-05 07:38:38
new和malloc的区别在于,new还为它分配内存的实体调用构造函数(如果有的话)。但是,由于char是使用new或malloc的基本类型,所以没有构造函数,所以没有区别。delete和free也是如此。
我会亲自使用char*缓冲区(字符是内存中的1字节):
char* buf = new char[100];此外,请记住,在释放分配的缓冲区时,要使用如下构造:
delete[] buf;若要删除数组否则会有内存泄漏。,请执行以下操作。
我不会亲自使用std::string或std::vector,因为:
HTH,
JP
发布于 2011-08-05 07:34:24
这取决于你的程序是如何工作的。是客户端还是服务器?发送/接收固定长度的请求吗?以后需要修改数据吗?您想要以字符串的形式操作吗?
我会使用std::string,因为它在这方面是最灵活的。但正如你所看到的,这并不是最理想的。
https://stackoverflow.com/questions/6952820
复制相似问题