C++ 缓冲区大小每增加一次

C++ 缓冲区大小每增加一次,c++,c++11,serialization,flatbuffers,C++,C++11,Serialization,Flatbuffers,我正在使用flatbuffers处理对象流,我是否应该在每次完成创建对象时调用FlatBufferBuilder::Clear?我的代码如下: FlatBufferBuild fbb; while (true) { Foo foo; RecvFooFromNetwork(&foo); FooObject = CreateFooObjectDirect(fbb, foo.x, foo.y, ...); SaveToDisk(fbb.GetBufferPoin

我正在使用flatbuffers处理对象流,我是否应该在每次完成创建对象时调用
FlatBufferBuilder::Clear
?我的代码如下:

FlatBufferBuild fbb;
while (true) {
    Foo foo;
    RecvFooFromNetwork(&foo);
    FooObject = CreateFooObjectDirect(fbb, foo.x, foo.y, ...);
    SaveToDisk(fbb.GetBufferPointer(), fbb.GetSize());

    // <-- Should I call fbb.Clear() here?
}
flatbuffer构建fbb;
while(true){
富富,;
RecvFooFromNetwork(&foo);
FooObject=CreateFooObjectDirect(fbb,foo.x,foo.y,…);
SaveToDisk(fbb.GetBufferPointer(),fbb.GetSize());

//是的,您回答了自己的问题,您需要调用
Clear()
(最有效)或将
fbb
的声明移动到循环内。当您完成缓冲区时,它会留在构建器中。在调用
finish()后,可能会有一个断言用于创建更多数据,也许在Github上打开一个问题?

这与C++或C++ 11无关,所以与那些标签无关。它只与使用平面缓冲库的情况有关,它不是标准C++的一部分。你需要从库的发起人(即谷歌)阅读文档。@彼得,他在C++中使用了库,因此使用库的问题可能涉及C++语义,因此使用这个标签是完全有效的。一个对象或不几乎是语言不可知的,但在一般情况下,你认为C++标签只用于标准库的代码是不实用的,尤其是对于像平板缓冲区这样的库,它严重依赖C++如何处理内存。(或该库中的函数/类)参考该库的文档。这与C++语义无关,而且与该库实现的逻辑完全一致。只有能够帮助解决这个问题的C++开发者才会知道那些平板缓冲区。这些人将是C++开发者中的一小部分。e code它从不调用
Clear()
,因此我不确定在这种情况下调用它是否正确。示例代码也不会使用相同的
FlatBufferBuilder创建多个缓冲区,因为它正在循环中创建缓冲区。