我有这个小protobuf代码(简化,只包含必要的):
message ParamsMessage {
required int32 temperature = 1;
}
message MasterMessage {
enum Type { GETPARAMS = 1; SENDPARAMS = 2;}
required Type type = 1;
optional ParamsMessage paramsMessage = 2;
}
我现在用以下方式创建一个MasterMessage:
ParamsMessage * params = new ParamsMessage();
params->set_temperature(22);
MasterMessage master;
master.set_type(MasterMessage::SENDPARAMS);
master.set_allocated_paramsmessage(params);
问题是:我必须(在处理完消息后)删除params
消息吗,还是protobuf会帮我删除它?我在文档中找不到任何东西。
1条答案
按热度按时间mlnl4t2r1#
自从问了这个问题,我一直在继续寻找答案。也许别人也对答案感兴趣。
从这里:https://developers.google.com/protocol-buffers/docs/reference/cpp-generated
void设置分配的foo(字符串 * 值):将字符串对象设置为字段,如果存在,则释放先前的字段值。如果字符串指针不为NULL,则消息获得分配的字符串对象的所有权,has_foo()将返回true。否则,如果值为NULL,则行为与调用clear_foo()相同。string*
release_foo():释放字段的所有权,返回字符串对象的指针。调用this后,caller获得分配的字符串对象的所有权,has_foo()返回false,foo()返回默认值。
这意味着:只要你不调用
release_*
,protobuf就会负责删除对象。如果你在处理完Protobuf Message后还需要Object,你需要使用release_*
释放它,这会阻止Protobuf删除你的对象。