c++ - google - Protobuf: ¿set_allocated_*eliminará el objeto asignado?
proto google (1)
Tengo este pequeño código de protobuf (simplificado, solo contiene lo necesario):
message ParamsMessage {
required int32 temperature = 1;
}
message MasterMessage {
enum Type { GETPARAMS = 1; SENDPARAMS = 2;}
required Type type = 1;
optional ParamsMessage paramsMessage = 2;
}
Ahora creo un MasterMessage de la siguiente manera:
ParamsMessage * params = new ParamsMessage();
params->set_temperature(22);
MasterMessage master;
master.set_type(MasterMessage::SENDPARAMS);
master.set_allocated_paramsmessage(params);
La pregunta es: ¿Tengo que (después de ocuparme del mensaje) eliminar el Mensaje de params
, o protobuf lo eliminará por mí? No encuentro nada en la documentación.
Desde que hice la pregunta he seguido encontrando la respuesta. Tal vez alguien está interesado en la respuesta, también.
Desde aquí: https://developers.google.com/protocol-buffers/docs/reference/cpp-generated
void set_allocated_foo (string * value): establece el objeto string en el campo y libera el valor del campo anterior, si existe. Si el puntero de cadena no es NULL, el mensaje toma posesión del objeto de cadena asignado y has_foo () devolverá verdadero. De lo contrario, si el valor es NULL, el comportamiento es el mismo que llamar a clear_foo (). cuerda*
release_foo (): libera la propiedad del campo y devuelve el puntero del objeto de cadena. Después de llamar a esto, el llamador toma la propiedad del objeto de cadena asignado, has_foo () devolverá false y foo () devolverá el valor predeterminado.
Lo que significa: mientras no llame a release_*
, protobuf se encargará de eliminar el objeto. Si necesita el Objeto después de tratar con el Mensaje de Protobuf, debe release_*
usando release_*
, lo que evitará que Protobuf elimine su objeto.