2015-11-27 14 views
14

私はこの小さないるProtobufコード(非常に単純化された、唯一のneccessaryが含まれている)持っている:私は今MasterMessage、以下の方法を作成Protobuf:set_allocated_ *は割り当てられたオブジェクトを削除しますか?

message ParamsMessage { 
    required int32 temperature = 1; 
} 

message MasterMessage { 
    enum Type { GETPARAMS = 1; SENDPARAMS = 2;} 
    required Type type = 1; 

    optional ParamsMessage paramsMessage = 2; 

} 

を:

ParamsMessage * params = new ParamsMessage(); 
params->set_temperature(22); 
MasterMessage master; 
master.set_type(MasterMessage::SENDPARAMS); 
master.set_allocated_paramsmessage(params); 

質問です:私が扱った後、持っていますかparamsメッセージを削除するメッセージが表示されるのですか、それとも私のために対処するのでしょうか?私はドキュメントで何かを見つけることができません。

答えて

24

質問をして以来、私は答えを見つけ続けました。たぶん誰かが答えに興味があるかもしれません。ここから

https://developers.google.com/protocol-buffers/docs/reference/cpp-generated

無効set_allocated_foo(文字列*値): フィールドに文字列オブジェクトを設定し、それが存在する場合は、前のフィールドの値を解放します。文字列 がNULLでない場合、メッセージは割り当てられた 文字列オブジェクトの所有権を取り、has_foo()はtrueを返します。それ以外の場合、値 がNULLの場合、動作はclear_foo()を呼び出すのと同じです。 string *

release_foo():フィールドの所有権を解放し、文字列オブジェクトの ポインタを返します。これを呼び出した後、呼び出し側は割り当てられた文字列オブジェクトの所有権を 、has_foo()はfalseを返し、 とfoo()はデフォルト値を返します。限り、あなたはないコールrelease_*がそうであるように、いるProtobufがオブジェクトを削除するの世話をする:意味

。 Protobufメッセージを処理した後でオブジェクトが必要な場合は、release_*を使用してオブジェクトを解放する必要があります。これによりProtobufはオブジェクトを削除できなくなります。

関連する問題