Вероятно, та же проблема с корнем, что и у ссылки Алексея.В поставленной версии нарушен код перемещения для basic_string.MS отказалась от нас, пользователей VC10, поэтому вы должны исправить это самостоятельно.в файле xstring у вас есть это:
_Myt& assign(_Myt&& _Right)
{ // assign by moving _Right
if (this == &_Right)
;
else if (get_allocator() != _Right.get_allocator()
&& this->_BUF_SIZE <= _Right._Myres)
*this = _Right;
else
{ // not same, clear this and steal from _Right
_Tidy(true);
if (_Right._Myres < this->_BUF_SIZE)
_Traits::move(this->_Bx._Buf, _Right._Bx._Buf,
_Right._Mysize + 1);
else
{ // copy pointer
this->_Bx._Ptr = _Right._Bx._Ptr;
_Right._Bx._Ptr = 0;
}
this->_Mysize = _Right._Mysize;
this->_Myres = _Right._Myres;
_Right._Mysize = 0;
_Right._Myres = 0;
}
return (*this);
}
Обратите внимание на последние
_Right._Myres = 0;
, которые должны происходить только при последнем условии, для короткого случая_Право лучше оставить в покое.
Поскольку емкость установлена на 0 вместо 15, другой код будет занимать непреднамеренную ветвь в функции Grow (), когда вы назначите другую небольшую строку, и выделит блок памяти только длярастоптать указатель с непосредственным содержимым строки.