我有两个自定义的protobuf库。一种是动态的,另一种是静态的。 静态库有一条消息:
message DataType
{
int number = 1;
string name_1 = 2;
string name_2 = 3;
string name_3 = 4;
}
// The dynamic lib has a message:
message MyMessage
{
DataType type = 1;
}
我通过将静态原型库链接到它来构建动态原型库。 然后,我建立了将动态原型库链接到的exe应用程序。
问题是当我设置name_1,name_2或name_3之一时,它们都具有此值。我认为所有这些字符串都具有相同的缓冲区。 如果将动态库转换为静态库,则问题消失。 谁能解释我这是怎么回事?谢谢。
答案 0 :(得分:0)
如果未设置字段,则应返回空字符串。请检查文档here。
如果您使用的是版本2,则可以查询该字段是否由has_name_x()
设置。
顺便说一下,有几种方法可以设置值:
void set_name_x(const string& value)
C++11
,您可以移动字符串值:void set_name_x(string&& value)
void set_allocated_name_x(string* value)
string* mutable_name_x()
我建议您熟悉protobuf,并让它管理内存并使用set_name_x
。如果这还不够,您可以通过手动内存管理来优化代码。