Commit: a094cdacf89a18e6fdb167ef8abdc4a79b905fa6 Author: Jacques Lucke Date: Mon Jun 6 14:01:25 2022 +0200 Branches: master https://developer.blender.org/rBa094cdacf89a18e6fdb167ef8abdc4a79b905fa6
BLI: fix memory error when moving VArray_Span The issue was that the new span still referenced data that was potentially stored in the old VArray_Span. =================================================================== M source/blender/blenlib/BLI_virtual_array.hh =================================================================== diff --git a/source/blender/blenlib/BLI_virtual_array.hh b/source/blender/blenlib/BLI_virtual_array.hh index 0705d423f01..8f228ea188e 100644 --- a/source/blender/blenlib/BLI_virtual_array.hh +++ b/source/blender/blenlib/BLI_virtual_array.hh @@ -1153,6 +1153,30 @@ template<typename T> class VArray_Span final : public Span<T> { this->data_ = owned_data_.data(); } } + + VArray_Span(VArray_Span &&other) + : varray_(std::move(other.varray_)), owned_data_(std::move(other.owned_data_)) + { + this->size_ = varray_.size(); + if (varray_.is_span()) { + this->data_ = varray_.get_internal_span().data(); + } + else { + this->data_ = owned_data_.data(); + } + other.data_ = nullptr; + other.size_ = 0; + } + + VArray_Span &operator=(VArray_Span &&other) + { + if (this == &other) { + return *this; + } + std::destroy_at(this); + new (this) VArray_Span(std::move(other)); + return *this; + } }; /** _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs