在使用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指向的内存,并在结束使用后自行释放。
网友评论