feat(c++): add SharedWeak<T> for circular reference support #3109
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Why?
C++ serialization needs support for weak pointers to handle circular references in graph-like structures (e.g., parent-child relationships). Unlike
std::weak_ptr<T>, we need a wrapper that allows updating the internal pointer during deserialization for forward reference resolution.What does this PR do?
Adds
SharedWeak<T>- a serializable wrapper aroundstd::weak_ptr<T>designed for graph structures with circular references.Key features:
SharedWeak<T>wrapper class (weak_ptr_serializer.h)std::weak_ptr<T>insidestd::shared_ptr<Inner>so all copies share the same internal storagefrom(),upgrade(),update(),expired()methodsForward reference resolution (
ref_resolver.h)add_update_callback(ref_id, UpdateCallback)overload toRefReaderSerializer implementation (
weak_ptr_serializer.h)track_ref=truefor reference trackingType traits
is_shared_weak<T>- detection traitrequires_ref_metadata<SharedWeak<T>>- always trueis_nullable<SharedWeak<T>>- always trueExample usage:
Related issues
#1017
#2906
Closes #2976
Closes #2977
Does this PR introduce any user-facing change?
SharedWeak<T>class for C++ usersBenchmark
N/A - this is a new feature addition.