Protobuf:set_allocated_*会删除分配的对象吗?

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删除您的对象.

  • @Maxime.D - 久违的问题,但这可能是因为双重免费。正如帖子所说,protobuf 会为您删除它。不要在堆栈上留下子消息。 (2认同)