-private:
- bool Alloc(size_type sz)
- {
- // work in multiples of m_allocsize;
- sz = (sz / m_allocsize + 1) * m_allocsize;
- if (sz <= m_capacity)
- return true;
+#if wxUSE_EXCEPTIONS
+ try
+ {
+#endif
+ // use placement new to initialize new object in preallocated place
+ // in m_values and store 'v' in it:
+ void* const place = m_values + idx;
+ new(place) value_type(v);
+#if wxUSE_EXCEPTIONS
+ }
+ catch ( ... )
+ {
+ // if the ctor threw an exception, we need to move all the elements
+ // back to their original positions in m_values
+ if ( after > 0 )
+ {
+ memmove(m_values + idx,
+ m_values + idx + 1,
+ after * sizeof(value_type));
+ }
+
+ throw; // rethrow the exception
+ }
+#endif // wxUSE_EXCEPTIONS