wouldn't a concurrent change without synchronization be UB anyway? Also parent wants to cache the address, not the value (but you have to cache the value if you want to optimize manually)
Why would it be UB? All objects are behind (thin) pointers, which can be overwritten atomically.
Not necessarily UB, but absolutely "spooky action" nondeterministic race conditions that make things difficult to understand.