Reuse attribute creation code
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 826eb9b..941bd37 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -1714,9 +1714,8 @@
         }

     }

     if ( !attrib ) {

-        TIXMLASSERT( sizeof( XMLAttribute ) == _document->_attributePool.ItemSize() );

-        attrib = new (_document->_attributePool.Alloc() ) XMLAttribute();

-        attrib->_memPool = &_document->_attributePool;

+        attrib = CreateAttribute();

+        TIXMLASSERT( attrib );

         if ( last ) {

             last->_next = attrib;

         }

@@ -1724,7 +1723,6 @@
             _rootAttribute = attrib;

         }

         attrib->SetName( name );

-        attrib->_memPool->SetTracked(); // always created and linked.

     }

     return attrib;

 }

@@ -1764,10 +1762,8 @@
 

         // attribute.

         if (XMLUtil::IsNameStartChar( *p ) ) {

-            TIXMLASSERT( sizeof( XMLAttribute ) == _document->_attributePool.ItemSize() );

-            XMLAttribute* attrib = new (_document->_attributePool.Alloc() ) XMLAttribute();

-            attrib->_memPool = &_document->_attributePool;

-			attrib->_memPool->SetTracked();

+            XMLAttribute* attrib = CreateAttribute();

+            TIXMLASSERT( attrib );

 

             p = attrib->ParseDeep( p, _document->ProcessEntities() );

             if ( !p || Attribute( attrib->Name() ) ) {

@@ -1816,6 +1812,15 @@
     pool->Free( attribute );

 }

 

+XMLAttribute* XMLElement::CreateAttribute()

+{

+    TIXMLASSERT( sizeof( XMLAttribute ) == _document->_attributePool.ItemSize() );

+    XMLAttribute* attrib = new (_document->_attributePool.Alloc() ) XMLAttribute();

+    attrib->_memPool = &_document->_attributePool;

+    attrib->_memPool->SetTracked();

+    return attrib;

+}

+

 //

 //	<ele></ele>

 //	<ele>foo<b>bar</b></ele>