我是否需要删除传递给谷歌协议缓冲区(protobuf)的对象
Do I need to delete objects passed to google protocol buffer (protobuf)?
我有简单的消息:
message SmallValue {
int32 val = 1;
}
message Value {
int32 val1 = 1;
int32 val2 = 2;
SmallValue val3 = 3;
}
message SendMessage {
int32 id = 1;
oneof message {
Value value= 2;
}
我的代码段:
// create new pointer for smallValue
SmallValue* smallValue = new SmallValue();
smallValue->set_val3(3);
// create new object value and set_allocated_val3
Value value;
value.set_val1(1);
value.set_val2(2);
value.set_allocated_val3(smallValue);
// create new object message and set_allocated_value
SendMessage message;
message.set_id(0);
message.set_allocated_value(&value);
// after some work, release value from message
message.release_value();
我的问题是:
1. 调用message.release_value()
是否可以不调用delete &value;
,因为我没有创建new
指针?
2. smallValue
的记忆会随着我没有打电话value.release_smallValue();
而value
一起自动删除吗?
我是C++和protobuf的新手。请告诉我的代码是否有奇怪之处。
谢谢!
通常最好避免使用 set_allocated_*
和 release_*
方法;它们提供了您不需要的高级内存管理功能,除非您真的试图优化一些性能关键型代码。
您可以像这样重写代码,以避免担心内存管理:
SendMessage message;
message.set_id(0);
Value* value = message.mutable_value();
value->set_val1(1);
value->set_val2(2);
value->mutable_val3()->set_val(3);
相关文章:
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 从原始字节解码协议缓冲区(以 C++为单位)
- 如何使用ZeroMQ为协议缓冲区编写自己的RPC实现
- 协议缓冲区字符串字段的文本编码
- 构建使用协议缓冲区(不含 APK)的 Android 可执行 gRPC 服务器
- 无法使用 ReadBinaryProto Tensorflow 加载协议缓冲区
- 协议缓冲区的静态链接会导致与现有符号冲突
- 协议缓冲区ParseFromString不检查消息结尾
- 与Qt交叉编译到Raspberry Pi 3B+通讯录(协议缓冲区)-错误符号查找错误
- 编译的谷歌协议缓冲区不工作(C++)
- 使用协议缓冲区创建通用反序列化程序
- 在协议缓冲区 c++ 中反序列化字符串数组
- 使用升压缓冲区使用 UDP 协议进行序列化和发送
- 带有类成员的 pybind11 缓冲区协议
- 如何释放协议缓冲区内存
- 协议缓冲区错误版本
- 协议缓冲区#3将消息从c ++发送到c#
- 该程序是针对协议缓冲区运行时库的2.6.1版本编译的,该版本与已安装的版本(3.5.0)不兼容
- 浅拷贝到协议缓冲区的字节字段中
- Cython缓冲区协议示例错误