Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marian-nmt/intgemm.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--intgemm/aligned.h18
1 files changed, 11 insertions, 7 deletions
diff --git a/intgemm/aligned.h b/intgemm/aligned.h
index cba7d06..6b55ff2 100644
--- a/intgemm/aligned.h
+++ b/intgemm/aligned.h
@@ -47,6 +47,8 @@ template <class T> class AlignedVector {
}
AlignedVector &operator=(AlignedVector &&from) {
+ if (this == &from) return *this;
+ release();
mem_ = from.mem_;
size_ = from.size_;
from.mem_ = nullptr;
@@ -57,13 +59,7 @@ template <class T> class AlignedVector {
AlignedVector(const AlignedVector&) = delete;
AlignedVector& operator=(const AlignedVector&) = delete;
- ~AlignedVector() {
-#ifdef _MSC_VER
- _aligned_free(mem_);
-#else
- std::free(mem_);
-#endif
- }
+ ~AlignedVector() { release(); }
std::size_t size() const { return size_; }
@@ -81,6 +77,14 @@ template <class T> class AlignedVector {
private:
T *mem_;
std::size_t size_;
+
+ void release() {
+#ifdef _MSC_VER
+ _aligned_free(mem_);
+#else
+ std::free(mem_);
+#endif
+ }
};
} // namespace intgemm