25 using Handle = std::shared_ptr<T>;
29 if (
auto const result = std::atomic_load(&_data)) {
34 Handle desired = _Compute();
36 if (std::atomic_compare_exchange_strong(&_data, &expected, desired)) {
43 void Invalidate() { std::atomic_store(&_data, Handle()); }
46 virtual Handle _Compute() = 0;