Есть два разных способа интерпретации вопроса здесь; на фактическом транспортном уровне отсутствует понятие перекрестных ссылок; полезные данные будут продублированы на выходе.
В терминах представления в памяти; в основном это будет реализация / библиотека-спецификация c. В версиях C#, например: вы просто ... добавили бы ту же ссылку на объект снова, и она должна работать. Версия C ++, тем не менее, имеет гораздо более сильную модель владения из-за реализации арен. Вы можете попробовать AddAllocated
, но у меня есть догадка, что это тоже не сработает. В разделе «Расширенное управление памятью» есть несколько пунктов, но я не уверен, что ваш сценарий поддерживается.
Как примечание, даже в библиотеках, где у нас была модель с один и тот же объект использовался дважды: мы должны помнить, что при десериализации этих данных * 1013 мы все равно получим два разных экземпляра, а не один экземпляр с одинаковой ссылкой в двух местах - так как нет «идентификатора объекта» (или подобного) как части protobuf. С точки зрения десериализатора, это просто два совершенно разных объекта, которые имеют одинаковое содержимое. Значение: даже если вы работаете при сериализации; Ваши усилия не будут уважаться при десериализации. Итак: во многих отношениях это бесполезная попытка - в конце концов, вы, вероятно, захотите десериализовать данных, и в этот момент: вы вернулись туда, куда не хотели будет.