如何让FlatBuffers C++ Object API生成指针类型的vector?
解决FlatBuffers C++ Object API生成指针类型vector的方法
要让flatc生成vector<namespace::of::TableT*>类型的list字段,只需修改schema中的字段定义,添加cpp_pointer属性即可:
修改后的schema
include "link_to_sub.fbs"; namespace My_namespace; table My_tables { list : [ namespace.of.Table ] (required, native_inline, cpp_pointer); } root_type My_tables;
关键说明
- 添加
cpp_pointer属性后,重新用flatc生成C++代码,My_tablesT中的list成员就会变为vector<namespace::of::TableT*> list{},直接复用内存中已有的TableT对象指针,避免完整拷贝。 - 注意:使用指针类型后,内存管理责任转移到你自己身上——FlatBuffer不会自动释放这些
TableT对象,需要你手动管理它们的生命周期,防止内存泄漏。 - 序列化时,FlatBuffer Builder会正常读取指针指向的
TableT对象数据,不影响动态创建FlatBuffer的流程,只需确保对象在序列化完成前保持有效。
内容的提问来源于stack exchange,提问作者LeXav
相关产品推荐
相关产品推荐

