diff --git a/fi/include/frequent_items_sketch_impl.hpp b/fi/include/frequent_items_sketch_impl.hpp
index 91a0152..bb05aa9 100644
--- a/fi/include/frequent_items_sketch_impl.hpp
+++ b/fi/include/frequent_items_sketch_impl.hpp
@@ -313,10 +313,9 @@
     typedef typename std::allocator_traits<A>::template rebind_alloc<W> AllocW;
     std::vector<W, AllocW> weights(num_items);
     is.read((char*)weights.data(), sizeof(W) * num_items);
-    items_deleter deleter(num_items, false);
-    std::unique_ptr<T, items_deleter> items(A().allocate(num_items), deleter);
+    std::unique_ptr<T, items_deleter> items(A().allocate(num_items), items_deleter(num_items, false));
     S().deserialize(is, items.get(), num_items);
-    deleter.set_destroy(true); // serde did not throw, so the items must be constructed
+    items.get_deleter().set_destroy(true); // serde did not throw, so the items must be constructed
     for (uint32_t i = 0; i < num_items; i++) {
       sketch.update(std::move(items.get()[i]), weights[i]);
     }
@@ -372,11 +371,10 @@
     typedef typename std::allocator_traits<A>::template rebind_alloc<W> AllocW;
     std::vector<W, AllocW> weights(num_items);
     ptr += copy_from_mem(ptr, weights.data(), sizeof(W) * num_items);
-    items_deleter deleter(num_items, false);
-    std::unique_ptr<T, items_deleter> items(A().allocate(num_items), deleter);
+    std::unique_ptr<T, items_deleter> items(A().allocate(num_items), items_deleter(num_items, false));
     const size_t bytes_remaining = size - (ptr - base);
     ptr += S().deserialize(ptr, bytes_remaining, items.get(), num_items);
-    deleter.set_destroy(true); // serde did not throw, so the items must be constructed
+    items.get_deleter().set_destroy(true); // serde did not throw, so the items must be constructed
     for (uint32_t i = 0; i < num_items; i++) {
       sketch.update(std::move(items.get()[i]), weights[i]);
     }
