如果proto结构体的变量是基础变量,比如int、string等等,那么set的时候直接调用set_xxx即可。
如果变量是自定义类型,那么C++的生成代码中,就没有set_xxx函数名,取而代之的是三个函数名:
- set_allocated_xxx()
- release_xxx()
- mutable_xxx()
使用set_allocated_xxx()来设置变量的时候,变量不能是普通栈内存数据,必须是手动new出来的指针,至于何时delete,就不需要调用者关心了,protobuf内部会自动delete掉通过set_allocated_设置的内存;
release_xxx()是用来取消之前由set_allocated_xxx设置的数据,调用release_xxx以后,protobuf内部就不会自动去delete这个数据了;
mutable_xxx()是用来返回之前set_allocated_xxx设置的数据的const指针,方便你临时读取这个数据的同时,protobuf内部继续自动管理(delete)该数据。
更多说明见官方文档:
https://developers.google.com/protocol-buffers/docs/reference/cpp-generated
相关推荐
本文将详细介绍如何使用Java来操作protobuf,主要内容分为三个部分:定义`.proto`文件、编译生成Java代码以及使用Java API进行读写操作。 #### 二、定义 `.proto` 文件 在使用protobuf之前,首先需要定义数据结构,...
接下来,为了在C++中使用这些定义,我们需要使用`protoc`编译器生成C++代码。`protoc`会生成服务接口的抽象类和消息类型的结构体,供我们实现和使用。这通常包括一个`my_service.pb.h`头文件和一个`my_service.pb.cc...
这些类提供了序列化和反序列化的方法,方便在Java代码中使用。 5. **使用Java类**:在你的Java应用中,你可以导入生成的类,创建消息对象,序列化成二进制数据,或者从接收到的数据反序列化回对象。 6. **示例**:...
1. **IDL(Interface Description Language)**: Thrift使用自己的接口描述语言,类似于Java的接口或protobuf的.proto文件,用来定义服务和数据类型。例如: ```idl service MyService { void sayHello(1:string ...
control.cpp ./proto/BroadcastMsg.pb.cc)`:创建一个名为“Broadcast”的可执行文件,其源代码包括main.cpp、communication.cpp、gst_control.cpp和protobuf生成的C++文件。 11. **链接库**: - `target_link_...