char* GetBuffer(size_t nLength = (size_t)-1) { size_t nNewLength = (nLength == (size_t)-1)?m_pData->GetLength():nLength; if ( !m_pData->Unique() || (nNewLength > m_pData->GetSize()) ) { StringData<char>* pNewData = new StringData<char>(nNewLength+1); memcpy(pNewData->GetData(), m_pData->GetData(), m_pData->GetLength()); pNewData->SetLength(m_pData->GetLength()); FreeData(); m_pData = pNewData; } return m_pData->GetData(); }