Commit b59e1cc056ff8596e53555c4d0afbf5068be938f

Authored by knodlseder
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;
... ...