1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 12:07:45 +00:00

AK: Make RetainPtr and Retained more friendly towards const pointers.

Also add operator T&'s to Retained since it's nice to be able to pass them
to a function that takes a T&.
This commit is contained in:
Andreas Kling 2019-06-15 18:45:44 +02:00
parent 694b4a64bd
commit 01d1aee922
2 changed files with 41 additions and 13 deletions

View file

@ -44,16 +44,10 @@ public:
{
m_ptr->retain();
}
RETURN_TYPESTATE(unconsumed)
Retained(T& object)
: m_ptr(&object)
{
m_ptr->retain();
}
template<typename U>
RETURN_TYPESTATE(unconsumed)
Retained(U& object)
: m_ptr(&static_cast<T&>(object))
Retained(const U& object)
: m_ptr(&const_cast<T&>(static_cast<const T&>(object)))
{
m_ptr->retain();
}
@ -200,6 +194,19 @@ public:
return m_ptr;
}
CALLABLE_WHEN(unconsumed)
operator T&()
{
ASSERT(m_ptr);
return *m_ptr;
}
CALLABLE_WHEN(unconsumed)
operator const T&() const
{
ASSERT(m_ptr);
return *m_ptr;
}
private:
Retained() {}