Nid*_*ger 30 c++ protocol-buffers
我有这个小的protobuf代码(简化,只包含必要的):
message ParamsMessage {
required int32 temperature = 1;
}
message MasterMessage {
enum Type { GETPARAMS = 1; SENDPARAMS = 2;}
required Type type = 1;
optional ParamsMessage paramsMessage = 2;
}
Run Code Online (Sandbox Code Playgroud)
我现在以下列方式创建一个MasterMessage:
ParamsMessage * params = new ParamsMessage();
params->set_temperature(22);
MasterMessage master;
master.set_type(MasterMessage::SENDPARAMS);
master.set_allocated_paramsmessage(params);
Run Code Online (Sandbox Code Playgroud)
问题是:我是否必须(在处理消息后)删除params消息,或者将protobuf删除给我?我在文档中找不到任何内容.
Nid*_*ger 46
自从提出问题以来,我一直在寻找答案.也许有人对答案感兴趣.
从这里开始:https://developers.google.com/protocol-buffers/docs/reference/cpp-generated
void set_allocated_foo(string*value):将字符串对象设置为字段,并释放前一个字段值(如果存在).如果字符串指针不为NULL,则消息将获取所分配的字符串对象的所有权,并且has_foo()将返回true.否则,如果值为NULL,则行为与调用clear_foo()相同.串*
release_foo():释放字段的所有权并返回字符串对象的指针.在调用它之后,调用者获取所分配的字符串对象的所有权,has_foo()将返回false,并且foo()将返回默认值.
这意味着:只要你不打电话release_*,protobuf就会负责删除这个对象.如果在处理Protobuf消息后需要Object,则需要使用它来重新启动它release_*,这将阻止Protobuf删除您的对象.