diff --git a/src/common/arrstr.cpp b/src/common/arrstr.cpp index 94b64722ec..5a995d86c1 100644 --- a/src/common/arrstr.cpp +++ b/src/common/arrstr.cpp @@ -89,7 +89,14 @@ wxArrayString::wxArrayString(const wxArrayString& src) wxArrayString& wxArrayString::operator=(const wxArrayString& src) { if ( m_nSize > 0 ) + { + // Do this test here to avoid unnecessary overhead when assigning to an + // empty array, in that case there is no harm in self-assignment. + if ( &src == this ) + return *this; + Clear(); + } Copy(src); diff --git a/tests/arrays/arrays.cpp b/tests/arrays/arrays.cpp index 769f9aad30..db6a63eb88 100644 --- a/tests/arrays/arrays.cpp +++ b/tests/arrays/arrays.cpp @@ -350,6 +350,13 @@ void ArraysTestCase::wxStringArrayTest() wxArrayString a6; a6.Add("Foo"); a6.Insert(a6[0], 1, 100); + + wxArrayString a7; + a7 = a7; + CPPUNIT_ASSERT_EQUAL( 0, a7.size() ); + a7.Add("Bar"); + a7 = a7; + CPPUNIT_ASSERT_EQUAL( 1, a7.size() ); } void ArraysTestCase::SortedArray()