在赋值的时候你还在什么都没有考虑就开始逐一赋值了吗?
看看iosfwd中是怎么做的吧
在iosfwd中我们找到了这个函数
- static _Elem *__CLRCALL_OR_CDECL _Move_s(_Elem *_First1, size_t _Dest_size,const _Elem *_First2, size_t _Count)
- { // move [_First1, _First1 + _Count) to [_First2, ...)
- // _DEBUG_POINTER(_First1);
- // _DEBUG_POINTER(_First2);
- _SCL_SECURE_CRT_VALIDATE(_Dest_size >= _Count, NULL);
- _Elem *_Next = _First1;
- if (_First2 < _Next && _Next < _First2 + _Count)
- for (_Next += _Count, _First2 += _Count; 0 < _Count; --_Count)
- assign(*--_Next, *--_First2);
- else
- for (; 0 < _Count; --_Count, ++_Next, ++_First2)
- assign(*_Next, *_First2);
- return (_First1);
- }
功能就是逐一移动了,但是分了两种情况,自己看看吧
果然当不分两种情况时,_First1和 _First2指向同一段内存时发生了错误