Protobuf 自定义message中 set_allocated_*使用须知

在使用protobuf的过程中,一般会用到message内使用另一个message作为内部变量的参数类型的情况。如下:

message MyParameter{
    required int32 p1= 1;
    required int32 p2= 2;
}
 
message MainMsg{
    required int32 type = 1;
    MyParameter param= 2;
}

我使用的编程语言是C++,使用过程中注意:

MyParameter* param= new MyParameter();
param->set_p1(22);

MainMsg master;
master.set_type(1);
master.set_allocated_param(param);

有一点需要注意:set_allocated_param()函数的参数的生命周期需要特别注意,因为调用此函数后,master消息只保存了param的指针,如果param是局部变量,那么会导致master消息的参数param访问非法内存。
而且,调用set_allocated_param函数后,master变量会接管param指向的内存,并在结束使用后自行释放。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容