diff --git a/tinyxml2.cpp b/tinyxml2.cpp index a0a0b235..7e212ae6 100644 --- a/tinyxml2.cpp +++ b/tinyxml2.cpp @@ -834,7 +834,17 @@ XMLNode::XMLNode( XMLDocument* doc ) : XMLNode::~XMLNode() { - DeleteChildren(); + // Fast path: this node is dying, so maintaining _firstChild/_lastChild and + // sibling _prev/_next links is unnecessary. Only _parent must be zeroed to + // satisfy the MarkInUse assertion inside DeleteNode. + XMLNode *currentChild = _firstChild; + while (currentChild != NULL) { + XMLNode *next = currentChild->_next; + currentChild->_parent = 0; + DeleteNode(currentChild); + currentChild = next; + } + if ( _parent ) { _parent->Unlink( this ); } @@ -2348,8 +2358,6 @@ static FILE* callfopen( const char* filepath, const char* mode ) } void XMLDocument::DeleteNode( XMLNode* node ) { - TIXMLASSERT( node ); - TIXMLASSERT(node->_document == this ); if(node == 0) { return; // check for null pointer } diff --git a/tinyxml2.h b/tinyxml2.h index c8011174..6dd15107 100644 --- a/tinyxml2.h +++ b/tinyxml2.h @@ -42,14 +42,6 @@ distribution. #endif #include -/* - gcc: - g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe - - Formatting, Artistic Style: - AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h -*/ - #if defined( _DEBUG ) || defined (__DEBUG__) # ifndef TINYXML2_DEBUG # define TINYXML2_DEBUG