c++ - 从方法返回指向 flatbuffer 的指针
问题描述
我有一个这样的类,即使构建器是在堆栈上创建的,返回 flatbuffer 指针是否有效
class Foo {
uint8_t* serialize() {
flatbuffers::FlatBufferBuilder builder(1024);
....
....
return builder.GetBufferPointer();
}
}
从这里的文档https://google.github.io/flatbuffers/md__cpp_usage.html
“调用代码可能会通过 fbb.ReleaseBufferPointer() 获取缓冲区的所有权。如果你这样做,FlatBufferBuilder 将处于无效状态,必须清除它才能再次使用。然而,这也意味着你能够销毁构建器,同时将缓冲区保留在应用程序中。”
看起来这应该可以工作,即使构建器被破坏,返回的指针也将指向有效的缓冲区。有人可以确认这一点,看起来缓冲区本身是在堆上创建的。
解决方案
不,这不起作用,您使用GetBufferPointer
的是指向 拥有的内存的裸指针FlatBufferBuilder
,它将在离开函数时被释放。
就像您引用的文档说的那样,您必须ReleaseBufferPointer
改用。或者制作一个副本,尽管这显然效率较低。
更好地构建您的代码,以便调用者拥有FlatBufferBuilder
并将其作为参数传递。
推荐阅读
- javascript - 为什么 babel-loader 是 webpack 的一部分而不是 babel 本身?
- mysql - 在 SELECT 中模块化子选择定义?
- google-data-studio - 如何在 DataStudio 中创建具有最后日期值的表/记分卡?
- php - PHP:删除字符串中的所有序列,直到点
- python - 如何在 python tkinter 中使用多个单选按钮?
- matlab - 在MATLAB中添加两个元素的问题
- javascript - iframe 渲染错误:
属性宽度:负值无效 - android - 找不到变量:setImmediate(错误)
- angular - 角度鼠标悬停最小反应时间
- python-3.x - 如何根据 groupby 和出现次数添加列?