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消息,或者将原型交易给我?我在文档中找不到任何东西.
解决方法
从这里:https://developers.google.com/protocol-buffers/docs/reference/cpp-generated
void set_allocated_foo(string* value): Sets the string object to the
field and frees the prevIoUs field value if it exists. If the string
pointer is not NULL,the message takes ownership of the allocated
string object and has_foo() will return true. Otherwise,if the value
is NULL,the behavior is the same as calling clear_foo(). string*release_foo(): Releases the ownership of the field and returns the
pointer of the string object. After calling this,caller takes the
ownership of the allocated string object,has_foo() will return false,
and foo() will return the default value.
这意味着:只要你不调用release_ *,protobuf将会处理删除对象.如果在处理Protobuf消息后需要对象,则需要使用release_ *进行相关处理,这将阻止Protobuf删除对象.