我有简单的消息:
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
因为我没有打电话value.release_smallValue();
?
// 我是 C++ 和 protobuf 的新手。请告诉我我的代码是否有什么奇怪的地方。
Thanks!
通常最好避免使用set_allocated_*
and 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)