Implement "move" equivalent of assignment operator for StrPair
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 9928444..ee7a16c 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -70,6 +70,29 @@
}
+void StrPair::TransferTo( StrPair& other )
+{
+ if ( this == &other ) {
+ return;
+ }
+ // This in effect implements the assignment operator by "moving"
+ // ownership (as in auto_ptr).
+
+ TIXMLASSERT( other._flags == 0 );
+ TIXMLASSERT( other._start == 0 );
+ TIXMLASSERT( other._end == 0 );
+
+ other.Reset();
+
+ other._flags = _flags;
+ other._start = _start;
+ other._end = _end;
+
+ _flags = 0;
+ _start = 0;
+ _end = 0;
+}
+
void StrPair::Reset()
{
if ( _flags & NEEDS_DELETE ) {
@@ -824,7 +847,7 @@
// We read the end tag. Return it to the parent.
if ( ele && ele->ClosingType() == XMLElement::CLOSING ) {
if ( parentEnd ) {
- *parentEnd = ele->_value;
+ ele->_value.TransferTo( *parentEnd );
}
node->_memPool->SetTracked(); // created and then immediately deleted.
DeleteNode( node );