Commit b59e1cc056ff8596e53555c4d0afbf5068be938f
1 parent
e33c3cb4
properely deallocate nodes
Showing
1 changed file
with
15 additions
and
9 deletions
src/xml/GXmlNode.cpp
| 1 | 1 | /*************************************************************************** |
| 2 | 2 | * GXmlNode.cpp - XML node base class implementation * |
| 3 | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2010 by Jurgen Knodlseder * | |
| 4 | + * copyright (C) 2010-2011 by Jurgen Knodlseder * | |
| 5 | 5 | * ----------------------------------------------------------------------- * |
| 6 | 6 | * * |
| 7 | 7 | * This program is free software; you can redistribute it and/or modify * |
| ... | ... | @@ -48,7 +48,7 @@ |
| 48 | 48 | ***************************************************************************/ |
| 49 | 49 | GXmlNode::GXmlNode(void) |
| 50 | 50 | { |
| 51 | - // Initialise private members for clean destruction | |
| 51 | + // Initialise members | |
| 52 | 52 | init_members(); |
| 53 | 53 | |
| 54 | 54 | // Return |
| ... | ... | @@ -59,11 +59,11 @@ GXmlNode::GXmlNode(void) |
| 59 | 59 | /***********************************************************************//** |
| 60 | 60 | * @brief Copy constructor |
| 61 | 61 | * |
| 62 | - * @param[in] node Object from which the instance should be built. | |
| 62 | + * @param[in] node XML node. | |
| 63 | 63 | ***************************************************************************/ |
| 64 | 64 | GXmlNode::GXmlNode(const GXmlNode& node) |
| 65 | 65 | { |
| 66 | - // Initialise private members for clean destruction | |
| 66 | + // Initialise members | |
| 67 | 67 | init_members(); |
| 68 | 68 | |
| 69 | 69 | // Copy members |
| ... | ... | @@ -96,7 +96,7 @@ GXmlNode::~GXmlNode(void) |
| 96 | 96 | /***********************************************************************//** |
| 97 | 97 | * @brief Assignment operator |
| 98 | 98 | * |
| 99 | - * @param[in] node Object which should be assigned. | |
| 99 | + * @param[in] node XML node. | |
| 100 | 100 | ***************************************************************************/ |
| 101 | 101 | GXmlNode& GXmlNode::operator= (const GXmlNode& node) |
| 102 | 102 | { |
| ... | ... | @@ -106,7 +106,7 @@ GXmlNode& GXmlNode::operator= (const GXmlNode& node) |
| 106 | 106 | // Free members |
| 107 | 107 | free_members(); |
| 108 | 108 | |
| 109 | - // Initialise private members for clean destruction | |
| 109 | + // Initialise members | |
| 110 | 110 | init_members(); |
| 111 | 111 | |
| 112 | 112 | // Copy members |
| ... | ... | @@ -335,12 +335,18 @@ void GXmlNode::copy_members(const GXmlNode& node) |
| 335 | 335 | |
| 336 | 336 | /***********************************************************************//** |
| 337 | 337 | * @brief Delete class members |
| 338 | + * | |
| 339 | + * As container classes that hold pointers need to handle themselves the | |
| 340 | + * proper deallocation of memory, we loop here over all pointers and make | |
| 341 | + * sure that we deallocate the associated nodes. | |
| 338 | 342 | ***************************************************************************/ |
| 339 | 343 | void GXmlNode::free_members(void) |
| 340 | 344 | { |
| 341 | - // Free nodes | |
| 342 | -// for (int i = 0; i < m_nodes.size(); ++i) | |
| 343 | -// delete m_nodes[i]; | |
| 345 | + // Free memory for all nodes | |
| 346 | + for (int i = 0; i < m_nodes.size(); ++i) { | |
| 347 | + delete m_nodes[i]; | |
| 348 | + m_nodes[i] = NULL; | |
| 349 | + } | |
| 344 | 350 | |
| 345 | 351 | // Return |
| 346 | 352 | return; | ... | ... |