AK: Simplify RefPtr and NonnullRefPtr's leak_ref() functions

Use AK::exchange() to switch out the internal storage. Also mark these
functions with [[nodiscard]] to provoke an compile-time error if they
are called without using the return value.
This commit is contained in:
Andreas Kling 2019-08-02 12:05:09 +02:00
parent 15866714da
commit fe25426ee4
2 changed files with 4 additions and 8 deletions

View file

@ -148,14 +148,12 @@ public:
return *this;
}
CALLABLE_WHEN(unconsumed)
[[nodiscard]] CALLABLE_WHEN(unconsumed)
SET_TYPESTATE(consumed)
T& leak_ref()
{
ASSERT(m_ptr);
T* leakedPtr = m_ptr;
m_ptr = nullptr;
return *leakedPtr;
return *exchange(m_ptr, nullptr);
}
CALLABLE_WHEN("unconsumed","unknown")

View file

@ -188,11 +188,9 @@ public:
bool operator!() const { return !m_ptr; }
T* leak_ref()
[[nodiscard]] T* leak_ref()
{
T* leakedPtr = m_ptr;
m_ptr = nullptr;
return leakedPtr;
return exchange(m_ptr, nullptr);
}
T* ptr() { return m_ptr; }