File tree 1 file changed +6
-10
lines changed
1 file changed +6
-10
lines changed Original file line number Diff line number Diff line change @@ -238,16 +238,15 @@ String &String::copy(const char *cstr, unsigned int length) {
238
238
#ifdef __GXX_EXPERIMENTAL_CXX0X__
239
239
void String::move (String &rhs) {
240
240
if (buffer ()) {
241
- if (capacity () >= rhs.len ()) {
241
+ if (capacity () >= rhs.len () && rhs. len () && rhs. buffer () ) {
242
242
memmove (wbuffer (), rhs.buffer (), rhs.length () + 1 );
243
243
setLen (rhs.len ());
244
244
rhs.invalidate ();
245
245
return ;
246
- } else {
247
- if (!isSSO ()) {
248
- free (wbuffer ());
249
- setBuffer (nullptr );
250
- }
246
+ }
247
+ if (!isSSO ()) {
248
+ free (wbuffer ());
249
+ setBuffer (nullptr );
251
250
}
252
251
}
253
252
if (rhs.isSSO ()) {
@@ -259,10 +258,7 @@ void String::move(String &rhs) {
259
258
}
260
259
setCapacity (rhs.capacity ());
261
260
setLen (rhs.len ());
262
- rhs.setSSO (false );
263
- rhs.setCapacity (0 );
264
- rhs.setBuffer (nullptr );
265
- rhs.setLen (0 );
261
+ rhs.init ();
266
262
}
267
263
#endif
268
264
You can’t perform that action at this time.
0 commit comments