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

AK: Make it possible to swap() a NonnullRefPtr with itself

The generic swap() is not able to swap a NonnullRefPtr with itself,
due to its use of a temporary and NonnullRefPtr asserting when trying
to move() from an already move()'d instance.
This commit is contained in:
Andreas Kling 2020-01-19 10:29:21 +01:00
parent 604c5cb98e
commit 39b3c0ef7e
2 changed files with 13 additions and 0 deletions

View file

@ -267,6 +267,12 @@ inline const LogStream& operator<<(const LogStream& stream, const NonnullRefPtr<
return stream << value.ptr(); return stream << value.ptr();
} }
template<typename T, typename U>
inline void swap(NonnullRefPtr<T>& a, NonnullRefPtr<U>& b)
{
a.swap(b);
}
} }
using AK::adopt; using AK::adopt;

View file

@ -73,4 +73,11 @@ TEST_CASE(assign_owner_of_self)
EXPECT_EQ(child->ref_count(), 1); EXPECT_EQ(child->ref_count(), 1);
} }
TEST_CASE(swap_with_self)
{
auto object = adopt(*new Object);
swap(object, object);
EXPECT_EQ(object->ref_count(), 1);
}
TEST_MAIN(String) TEST_MAIN(String)