From 7e61799f8b93fd6aaff9344cf0328cb566d83b3a Mon Sep 17 00:00:00 2001 From: q66 Date: Sun, 17 May 2015 17:28:11 +0100 Subject: [PATCH] vector: do not free buffer in copy assignment unless necessary --- octa/vector.h | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/octa/vector.h b/octa/vector.h index 3ec6374..567a7d7 100644 --- a/octa/vector.h +++ b/octa/vector.h @@ -102,21 +102,9 @@ namespace octa { && IsNothrowCopyConstructible::value ) { if (this == &v) return *this; - - if (p_cap >= v.p_cap) { - if (!octa::IsPod()) { - T *cur = p_buf, *last = p_buf + p_len; - while (cur != last) (*cur++).~T(); - } - p_len = v.p_len; - } else { - clear(); - delete[] (uchar *)p_buf; - p_len = v.p_len; - p_cap = v.p_cap; - p_buf = (T *)new uchar[p_cap * sizeof(T)]; - } - + clear(); + reserve(v.p_cap); + p_len = v.p_len; if (octa::IsPod()) { memcpy(p_buf, v.p_buf, p_len * sizeof(T)); } else { @@ -126,7 +114,6 @@ namespace octa { new (cur++) T(*vbuf++); } } - return *this; }