From: Vadim Zeitlin Date: Mon, 20 Jul 1998 22:23:51 +0000 (+0000) Subject: corrected bug in wxArrayString::operator= and it's copy ctor X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/4d14b524495fcf5f65c5c2e6e7ed7e084dc6355e corrected bug in wxArrayString::operator= and it's copy ctor git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@317 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/string.cpp b/src/common/string.cpp index a185a8ec26..49b3c74f86 100644 --- a/src/common/string.cpp +++ b/src/common/string.cpp @@ -1073,33 +1073,24 @@ wxArrayString::wxArrayString() // copy ctor wxArrayString::wxArrayString(const wxArrayString& src) { - m_nSize = src.m_nSize; - m_nCount = src.m_nCount; - - if ( m_nSize != 0 ) - m_pItems = new char *[m_nSize]; - else - m_pItems = NULL; + m_pItems = NULL; - if ( m_nCount != 0 ) - memcpy(m_pItems, src.m_pItems, m_nCount*sizeof(char *)); + *this = src; } -// copy operator +// assignment operator wxArrayString& wxArrayString::operator=(const wxArrayString& src) { DELETEA(m_pItems); - m_nSize = src.m_nSize; - m_nCount = src.m_nCount; - - if ( m_nSize != 0 ) - m_pItems = new char *[m_nCount]; - else - m_pItems = NULL; + m_nSize = 0; + if ( src.m_nCount > ARRAY_DEFAULT_INITIAL_SIZE ) + Alloc(src.m_nCount); - if ( m_nCount != 0 ) - memcpy(m_pItems, src.m_pItems, m_nCount*sizeof(char *)); + // we can't just copy the pointers here because otherwise we would share + // the strings with another array + for ( uint n = 0; n < src.m_nCount; n++ ) + Add(src[n]); return *this; } @@ -1116,7 +1107,8 @@ void wxArrayString::Grow() } else { // add 50% but not too much - size_t nIncrement = m_nSize >> 1; + size_t nIncrement = m_nSize < ARRAY_DEFAULT_INITIAL_SIZE + ? ARRAY_DEFAULT_INITIAL_SIZE : m_nSize >> 1; if ( nIncrement > ARRAY_MAXSIZE_INCREMENT ) nIncrement = ARRAY_MAXSIZE_INCREMENT; m_nSize += nIncrement;