X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/deb0c40261cfc5e4ac3f84782da48eaad40cc5d2..70405f7e3d3a1274d54c05ca8124d8bfb0bc3bb1:/include/wx/vector.h diff --git a/include/wx/vector.h b/include/wx/vector.h index 720d826ded..056202bcaa 100644 --- a/include/wx/vector.h +++ b/include/wx/vector.h @@ -66,7 +66,7 @@ struct wxVectorMemOpsGeneric T *mem = (T*)::operator new(newCapacity * sizeof(T)); for ( size_t i = 0; i < occupiedSize; i++ ) { - new(mem + i) T(old[i]); + ::new(mem + i) T(old[i]); old[i].~T(); } ::operator delete(old); @@ -80,7 +80,7 @@ struct wxVectorMemOpsGeneric T* sourceptr = source; for ( size_t i = count; i > 0; --i, ++destptr, ++sourceptr ) { - new(destptr) T(*sourceptr); + ::new(destptr) T(*sourceptr); sourceptr->~T(); } } @@ -92,7 +92,7 @@ struct wxVectorMemOpsGeneric T* sourceptr = source + count - 1; for ( size_t i = count; i > 0; --i, --destptr, --sourceptr ) { - new(destptr) T(*sourceptr); + ::new(destptr) T(*sourceptr); sourceptr->~T(); } } @@ -169,6 +169,22 @@ public: wxVector() : m_size(0), m_capacity(0), m_values(NULL) {} + wxVector(size_type size) + : m_size(0), m_capacity(0), m_values(NULL) + { + reserve(size); + for ( size_t n = 0; n < size; n++ ) + push_back(value_type()); + } + + wxVector(size_type size, const value_type& v) + : m_size(0), m_capacity(0), m_values(NULL) + { + reserve(size); + for ( size_t n = 0; n < size; n++ ) + push_back(v); + } + wxVector(const wxVector& c) : m_size(0), m_capacity(0), m_values(NULL) { Copy(c); @@ -230,8 +246,11 @@ public: wxVector& operator=(const wxVector& vb) { - clear(); - Copy(vb); + if (this != &vb) + { + clear(); + Copy(vb); + } return *this; } @@ -242,7 +261,7 @@ public: // use placement new to initialize new object in preallocated place in // m_values and store 'v' in it: void* const place = m_values + m_size; - new(place) value_type(v); + ::new(place) value_type(v); // only increase m_size if the ctor didn't throw an exception; notice // that if it _did_ throw, everything is OK, because we only increased @@ -309,7 +328,7 @@ public: // use placement new to initialize new object in preallocated place in // m_values and store 'v' in it: - new(place) value_type(v); + ::new(place) value_type(v); // now that we did successfully add the new element, increment the size // and disable moving the items back