Skip to main content
Journey Uncommon Logo
JourneyUncommon
hardC++relaxed memory semanticsSingle-choice MCQ

Using `fetch_add(1, std::memory_order_relaxed)` to increment a shared reference count is correct, but the final DECREMENT that frees the object needs more than relaxed. Why?

// increment: ref.fetch_add(1, std::memory_order_relaxed); // decrement: if (ref.fetch_sub(1, std::memory_order_???) == 1) { delete obj; }