Ответ 1
Поскольку я задал этот вопрос, я продолжал находить ответ. Может быть, кто-то тоже заинтересован в ответе.
Отсюда: https://developers.google.com/protocol-buffers/docs/reference/cpp-generated
void set_allocated_foo (string * value): Устанавливает строковый объект в поле и освобождает предыдущее значение поля, если оно существует. Если указатель строки не равен NULL, сообщение переходит в собственность выделенного строкового объекта, а has_foo() возвращает true. В противном случае, если значение равно NULL, поведение будет таким же, как вызов clear_foo(). строка *
release_foo(): освобождает право собственности на поле и возвращает указатель на строковый объект. После вызова этого вызова вызывающий объект переходит в собственность выделенного строкового объекта, has_foo() вернет false, а foo() вернет значение по умолчанию.
Это означает: до тех пор, пока вы не вызываете release_*
, protobuf позаботится об удалении объекта. Если вам нужен объект после работы с сообщением Protobuf, вам нужно его release_*
используя release_*
, что не позволит Protobuf удалить ваш объект.