23 using Handle = std::shared_ptr<T>;
27 if (
auto const result = std::atomic_load(&_data)) {
32 Handle desired = _Compute();
34 if (std::atomic_compare_exchange_strong(&_data, &expected, desired)) {
41 void Invalidate() { std::atomic_store(&_data, Handle()); }
44 virtual Handle _Compute() = 0;