C++ Protobuf:是否将设置\u已分配\u*删除已分配的对象?

C++ Protobuf:是否将设置\u已分配\u*删除已分配的对象?,c++,protocol-buffers,C++,Protocol Buffers,我有一个小protobuf代码(简化,只包含必要的代码): 我现在以以下方式创建主消息: ParamsMessage * params = new ParamsMessage(); params->set_temperature(22); MasterMessage master; master.set_type(MasterMessage::SENDPARAMS); master.set_allocated_paramsmessage(params); 问题是:我是否必须(在处理消息后

我有一个小protobuf代码(简化,只包含必要的代码):

我现在以以下方式创建主消息:

ParamsMessage * params = new ParamsMessage();
params->set_temperature(22);
MasterMessage master;
master.set_type(MasterMessage::SENDPARAMS);
master.set_allocated_paramsmessage(params);

问题是:我是否必须(在处理消息后)删除
params
消息,或者protobuf会为我删除它?我在文档中找不到任何东西。

自从问了这个问题后,我一直在寻找答案。也许有人也对答案感兴趣

从这里开始:

void set_allocated_foo(字符串*值):将字符串对象设置为 字段并释放上一个字段值(如果存在)。如果字符串 指针不为NULL,消息拥有分配的 string对象和has_foo()将返回true。否则,如果 如果为NULL,则行为与调用clear\u foo()相同。串*

release_foo():释放字段的所有权并返回 字符串对象的指针。调用此命令后,调用方接受 已分配字符串对象has_foo()的所有权将返回false, 和foo()将返回默认值


这意味着:只要您不调用not调用
release.*
,protobuf将负责删除对象。如果您在处理Protobuf消息后需要对象,则需要使用
release.*
,这将阻止Protobuf删除您的对象。

如果我调用myMessage.set.\u allocated.\u子消息(&submessage),我总是在末尾出现分段错误(对象的销毁?)。仅当我手动更新myMessage.release_submessage()时,它才会解决此问题。我不明白如果我不使用我的子消息,为什么我会有一个分段。。。你认为我的问题需要一个独立的帖子吗?是的,你应该把它作为一个独立的问题发布。@Maxime.D-长时间的死问题,但可能是因为双重自由。正如帖子所说,protobuf会帮你删除它。不要在堆栈上留下子消息。@Alex谢谢,但我在发布问题后得到了答案
ParamsMessage * params = new ParamsMessage();
params->set_temperature(22);
MasterMessage master;
master.set_type(MasterMessage::SENDPARAMS);
master.set_allocated_paramsmessage(params);