]> git.mxchange.org Git - flightgear.git/commitdiff
Memory leak fixes from Till Busch
authortimoore <timoore>
Sat, 19 Jan 2008 18:06:05 +0000 (18:06 +0000)
committertimoore <timoore>
Sat, 19 Jan 2008 18:06:05 +0000 (18:06 +0000)
src/Autopilot/xmlauto.cxx
src/Autopilot/xmlauto.hxx
src/GUI/dialog.cxx
src/Input/input.cxx

index 392c7b1f4fb796fe9ffbcac5ec0c9abe72d6c9f2..9ddcaf32b426885e1d4463b0669b4717f23a8b3f 100644 (file)
@@ -818,17 +818,13 @@ bool FGXMLAutopilot::build() {
         string name = node->getName();
         // cout << name << endl;
         if ( name == "pid-controller" ) {
-            FGXMLAutoComponent *c = new FGPIDController( node );
-            components.push_back( c );
+            components.push_back( new FGPIDController( node ) );
         } else if ( name == "pi-simple-controller" ) {
-            FGXMLAutoComponent *c = new FGPISimpleController( node );
-            components.push_back( c );
+            components.push_back( new FGPISimpleController( node ) );
         } else if ( name == "predict-simple" ) {
-            FGXMLAutoComponent *c = new FGPredictor( node );
-            components.push_back( c );
+            components.push_back( new FGPredictor( node ) );
         } else if ( name == "filter" ) {
-            FGXMLAutoComponent *c = new FGDigitalFilter( node );
-            components.push_back( c );
+            components.push_back( new FGDigitalFilter( node ) );
         } else {
             SG_LOG( SG_ALL, SG_ALERT, "Unknown top level section: " 
                     << name );
index a09b73a2ac1312bfb300d541ff80bffc918495d5..08f449424060542bdd0dd403f38f2a3f0bc28904 100644 (file)
@@ -52,7 +52,7 @@ SG_USING_STD(deque);
  * Base class for other autopilot components
  */
 
-class FGXMLAutoComponent {
+class FGXMLAutoComponent : public SGReferenced {
 
 protected:
 
@@ -275,7 +275,7 @@ public:
 
 protected:
 
-    typedef vector<FGXMLAutoComponent *> comp_list;
+    typedef vector<SGSharedPtr<FGXMLAutoComponent> > comp_list;
 
 private:
 
index 929f4f8a52d758703f1e5e65ef41ee0ec05c0e1d..6ca629438976e5f8228da16c2627d6960916f225 100644 (file)
@@ -813,11 +813,11 @@ FGDialog::setColor(puObject * object, SGPropertyNode * props, int which)
     if (type == "textbox" && props->getBoolValue("editable"))
         type += "-editable";
 
-    FGColor *c = new FGColor(_gui->getColor("background"));
-    c->merge(_gui->getColor(type));
-    c->merge(props->getNode("color"));
-    if (c->isValid())
-        object->setColourScheme(c->red(), c->green(), c->blue(), c->alpha());
+    FGColor c(_gui->getColor("background"));
+    c.merge(_gui->getColor(type));
+    c.merge(props->getNode("color"));
+    if (c.isValid())
+        object->setColourScheme(c.red(), c.green(), c.blue(), c.alpha());
 
     const struct {
         int mask;
@@ -840,20 +840,20 @@ FGDialog::setColor(puObject * object, SGPropertyNode * props, int which)
 
     for (int i = 0; i < numcol; i++) {
         bool dirty = false;
-        c->clear();
-        c->setAlpha(1.0);
+        c.clear();
+        c.setAlpha(1.0);
 
-        dirty |= c->merge(_gui->getColor(type + '-' + pucol[i].name));
+        dirty |= c.merge(_gui->getColor(type + '-' + pucol[i].name));
         if (which & pucol[i].mask)
-            dirty |= c->merge(props->getNode("color"));
+            dirty |= c.merge(props->getNode("color"));
 
-        if ((pucol[i].mask == LABEL) && !c->isValid())
-            dirty |= c->merge(_gui->getColor("label"));
+        if ((pucol[i].mask == LABEL) && !c.isValid())
+            dirty |= c.merge(_gui->getColor("label"));
 
-        dirty |= c->merge(props->getNode(pucol[i].cname));
+        dirty |= c.merge(props->getNode(pucol[i].cname));
 
-        if (c->isValid() && dirty)
-            object->setColor(pucol[i].id, c->red(), c->green(), c->blue(), c->alpha());
+        if (c.isValid() && dirty)
+            object->setColor(pucol[i].id, c.red(), c.green(), c.blue(), c.alpha());
     }
 }
 
index 1bf4b962aa143445e076ac1e333c14ded9e3d5b7..09ef2c21d0bbafc740253fa7ac12609f67b2cbc8 100644 (file)
@@ -1124,6 +1124,8 @@ FGInput::mouse_mode::~mouse_mode ()
 FGInput::mouse::mouse ()
   : x(-1),
     y(-1),
+    save_x(-1),
+    save_y(-1),
     nModes(1),
     current_mode(0),
     modes(0)