有效地清除表层的平面缓冲区构建器

Efficiently clearing flatbuffer builders for layers of tables

我可以在调用 builder.Clear() 后重用从 flatbuffers::FlatBufferBuilder 生成的 'sub' 生成器实例吗? builder.Clear()对子建造者有什么影响?

已生成如下平面缓冲区模式:

table FB_mytable1{
myshort::ushort = 0;
}
table FB_table2{
nestedTable1::FB_mytable1;
nestedTable1::FB_mytable1;
}
root_type FB_table2;

如果我使用 builder.clear() 重置构建器,我对 'flatbuffers::FlatBufferBuilder' 的实例化,这是否允许我生成新的串行数据而无需调用重置函数或更新任何个体 table 序列化器,比如我实例化的 FB_mytable1Builder myFB_mytable1Builder(builder)?或者我是否需要确保各个构建器对象具有一个范围,这意味着它们不会被重用?

clear() 重置 FlatBufferBuilder 就像刚刚构造的一样,任何 table 构建器实例不应跨多个缓冲区甚至多个 table 重复使用。

看,FlatBufferBuilder 是一个有点重量级的结构(因为它拥有一个缓冲区),所以尽可能重用它是有意义的。然而,table 构建器是超轻量级的,因此应该只是用于构建单个 table 的局部变量,您不能重复使用它们。