+ typedef T CharType;
+
+ wxCharTypeBuffer(const CharType *str = NULL)
+ : m_str(str ? wxStrdup(str) : NULL),
+ m_owned(true)
+ {
+ }
+
+ wxCharTypeBuffer(size_t len)
+ : m_str((CharType *)malloc((len + 1)*sizeof(CharType))),
+ m_owned(true)
+ {
+ m_str[len] = (CharType)0;
+ }
+
+ static const wxCharTypeBuffer CreateNonOwned(const CharType *str)
+ {
+ wxCharTypeBuffer buf;
+ buf.m_str = wx_const_cast(CharType*, str);
+ buf.m_owned = false;
+ return buf;
+ }
+
+ /* no need to check for NULL, free() does it */
+ ~wxCharTypeBuffer()
+ {
+ if ( m_owned)
+ free(m_str);
+ }
+
+ /*
+ WARNING:
+
+ the copy ctor and assignment operators change the passed in object
+ even although it is declared as "const", so:
+
+ a) it shouldn't be really const
+ b) you shouldn't use it afterwards (or know that it was reset)
+
+ This is very ugly but is unfortunately needed to make the normal use
+ of wxCharTypeBuffer buffer objects possible and is very similar to what
+ std::auto_ptr<> does (as if it were an excuse...)
+ */
+
+ /*
+ because of the remark above, release() is declared const even if it
+ isn't really const
+ */
+ CharType *release() const