我有簡單的信息:我是否需要刪除傳遞給google協議緩衝區(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()
是OK不要叫delete &value;
因爲我沒有經過創建new
指針?
2. smallValue
的記憶會自動刪除value
,因爲我沒有撥打value.release_smallValue();
?
//我是C++以及protobuf的新手。請確定我的代碼是否有些奇怪。
謝謝!
我會感到驚訝,如果谷歌有這樣做的內存管理怪異的庫。我希望你必須自己管理記憶。也就是說,你只能刪除通過'new'分配的指針。 'value'不是通過'new'分配的;它被分配在堆棧上。 OTOH你應該(幾乎)不必顯式地鍵入'new'或'delete';你應該使用'std :: unique_ptr'和'std :: make_unique' – Justin
@Justin感謝您對'std :: unique_ptr'和'std :: make_unique'的引用。我會研究它。 –