diff --git a/src/sfizz/Buffer.h b/src/sfizz/Buffer.h index 0cab3d9b..60b53e19 100644 --- a/src/sfizz/Buffer.h +++ b/src/sfizz/Buffer.h @@ -149,12 +149,15 @@ public: */ Buffer(Buffer&& other) { - largerSize = std::exchange(other.largerSize, 0); - alignedSize = std::exchange(other.alignedSize, 0); - paddedData = std::exchange(other.paddedData, nullptr); - normalData = std::exchange(other.normalData, nullptr); - normalEnd = std::exchange(other.normalEnd, nullptr); - _alignedEnd = std::exchange(other._alignedEnd, nullptr); + if (this != &other) { + std::free(paddedData); + largerSize = std::exchange(other.largerSize, 0); + alignedSize = std::exchange(other.alignedSize, 0); + paddedData = std::exchange(other.paddedData, nullptr); + normalData = std::exchange(other.normalData, nullptr); + normalEnd = std::exchange(other.normalEnd, nullptr); + _alignedEnd = std::exchange(other._alignedEnd, nullptr); + } } Buffer& operator=(const Buffer& other) @@ -188,6 +191,7 @@ public: constexpr iterator end() noexcept { return normalEnd; } constexpr pointer alignedEnd() noexcept { return _alignedEnd; } + private: static constexpr auto AlignmentMask { Alignment - 1 }; static constexpr auto TypeAlignment { Alignment / sizeof(value_type) };