sparse_set: free memory in move assignment operator (with tests)

This commit is contained in:
Michele Caini
2021-05-24 09:52:09 +02:00
parent 0ab46870ae
commit ae11652493
2 changed files with 7 additions and 0 deletions

View File

@@ -336,6 +336,9 @@ public:
* @return This sparse set.
*/
basic_sparse_set & operator=(basic_sparse_set &&other) ENTT_NOEXCEPT {
maybe_resize_packed(0u);
maybe_release_pages();
allocator = std::move(other.allocator);
bucket_allocator = std::move(other.bucket_allocator);
sparse = std::exchange(other.sparse, bucket_alloc_pointer{});
@@ -343,6 +346,7 @@ public:
bucket = std::exchange(other.bucket, 0u);
count = std::exchange(other.count, 0u);
reserved = std::exchange(other.reserved, 0u);
return *this;
}

View File

@@ -67,6 +67,9 @@ TEST(SparseSet, Functionalities) {
entt::sparse_set other{std::move(set)};
set = std::move(other);
other = entt::sparse_set{};
other.emplace(entt::entity{3});
other = std::move(set);
ASSERT_TRUE(set.empty());