diff --git a/src/box/index.cc b/src/box/index.cc
index 8b2eefcd130787cd68119045556e4728eeac6103..aa43407178f4123ac23e70370c81a64ce993c6a4 100644
--- a/src/box/index.cc
+++ b/src/box/index.cc
@@ -1049,4 +1049,10 @@ generic_index_read_view_iterator_position(struct index_read_view_iterator *it,
 	return -1;
 }
 
+void
+generic_index_read_view_iterator_destroy(struct index_read_view_iterator *it)
+{
+	TRASH(it);
+}
+
 /* }}} */
diff --git a/src/box/index.h b/src/box/index.h
index 59589a2832ee396c291016317caafbf6a838a99a..b646876fa7285bfc8e3999b76dc0e77374563a56 100644
--- a/src/box/index.h
+++ b/src/box/index.h
@@ -718,6 +718,9 @@ struct index_read_view {
 struct index_read_view_iterator_base {
 	/** Pointer to the index read view. */
 	struct index_read_view *index;
+	/** Destroy a read view iterator. */
+	void
+	(*destroy)(struct index_read_view_iterator *iterator);
 	/**
 	 * Iterate to the next tuple in the read view.
 	 *
@@ -747,7 +750,7 @@ struct index_read_view_iterator_base {
 };
 
 /** Size of the index_read_view_iterator struct. */
-#define INDEX_READ_VIEW_ITERATOR_SIZE 64
+#define INDEX_READ_VIEW_ITERATOR_SIZE 72
 
 static_assert(sizeof(struct index_read_view_iterator_base) <=
 	      INDEX_READ_VIEW_ITERATOR_SIZE,
@@ -1049,7 +1052,7 @@ index_read_view_create_iterator(struct index_read_view *rv,
 static inline void
 index_read_view_iterator_destroy(struct index_read_view_iterator *iterator)
 {
-	TRASH(iterator);
+	iterator->base.destroy(iterator);
 }
 
 static inline int
@@ -1123,6 +1126,8 @@ generic_iterator_position(struct iterator *it, const char **pos,
 int
 generic_index_read_view_iterator_position(struct index_read_view_iterator *it,
 					  const char **pos, uint32_t *size);
+void
+generic_index_read_view_iterator_destroy(struct index_read_view_iterator *it);
 
 #if defined(__cplusplus)
 } /* extern "C" */
diff --git a/src/box/memtx_hash.cc b/src/box/memtx_hash.cc
index 19789de928bc53f863545f86b89b38511fa99636..a5c80580fbeb4a9870232140a9312978b65a33a7 100644
--- a/src/box/memtx_hash.cc
+++ b/src/box/memtx_hash.cc
@@ -628,6 +628,7 @@ hash_read_view_create_iterator(struct index_read_view *base,
 	struct hash_read_view_iterator *it =
 		(struct hash_read_view_iterator *)iterator;
 	it->base.index = base;
+	it->base.destroy = generic_index_read_view_iterator_destroy;
 	it->base.next_raw = exhausted_index_read_view_iterator_next_raw;
 	it->base.position = generic_index_read_view_iterator_position;
 	light_index_view_iterator_begin(&rv->view, &it->iterator);
diff --git a/src/box/memtx_tree.cc b/src/box/memtx_tree.cc
index 36316396ddad881006c6a0912b5fe967a778f6e9..92f496c8dafd0001de33db85330a169e0a367e02 100644
--- a/src/box/memtx_tree.cc
+++ b/src/box/memtx_tree.cc
@@ -2047,6 +2047,7 @@ tree_read_view_create_iterator(struct index_read_view *base,
 	struct tree_read_view_iterator<USE_HINT> *it =
 		(struct tree_read_view_iterator<USE_HINT> *)iterator;
 	it->base.index = base;
+	it->base.destroy = generic_index_read_view_iterator_destroy;
 	it->base.next_raw = exhausted_index_read_view_iterator_next_raw;
 	if (it->base.index->def->key_def->for_func_index)
 		it->base.position =
diff --git a/src/box/sequence.c b/src/box/sequence.c
index 00c691f6f8c043cb48a60d4d3c9fbbe7b32101d9..f504c21ece9d922b9b0757ca2fbdf211de2eea80 100644
--- a/src/box/sequence.c
+++ b/src/box/sequence.c
@@ -388,7 +388,9 @@ sequence_data_iterator_create(struct index_read_view *base,
 	struct sequence_data_iterator *iter =
 		(struct sequence_data_iterator *)iterator;
 	iter->base.index = base;
+	iter->base.destroy = generic_index_read_view_iterator_destroy;
 	iter->base.next_raw = sequence_data_iterator_next_raw;
+	iter->base.position = generic_index_read_view_iterator_position;
 	light_sequence_view_iterator_begin(&rv->view, &iter->iter);
 	return 0;
 }