}
FGAIMgr::~FGAIMgr() {
+ for (ai_list_itr = ai_list.begin(); ai_list_itr != ai_list.end(); ai_list_itr++) {
+ delete (*ai_list_itr);
+ }
}
void FGAIMgr::init() {
{
delete _menubar;
_dialog_props.clear();
+ for (_itt_t it = _colors.begin(); it != _colors.end(); ++it)
+ delete it->second;
}
void
_distance_m(0),
_course_deg(0),
_name(node->getStringValue("name", "gps")),
- _num(node->getIntValue("number", 0))
+ _num(node->getIntValue("number", 0)),
+ route(0)
{
}
GPS::~GPS ()
{
+ delete route;
}
void
GPS::init ()
{
+ delete route; // in case init is called twice
route = new SGRoute;
route->clear();
# include <config.h>
#endif
+#include <simgear/scene/model/modellib.hxx>
#include <simgear/sound/soundmgr_openal.hxx>
#include <simgear/structure/commands.hxx>
#include <simgear/misc/sg_path.hxx>
-
+#include <simgear/timing/sg_time.hxx>
+#include <simgear/ephemeris/ephemeris.hxx>
+#include <simgear/magvar/magvar.hxx>
+#include <simgear/scene/material/matlib.hxx>
+
+#include <Aircraft/controls.hxx>
+#include <Airports/runways.hxx>
+#include <ATC/AIMgr.hxx>
+#include <ATC/ATCmgr.hxx>
+#include <Autopilot/route_mgr.hxx>
+#include <Cockpit/panel.hxx>
#include <GUI/new_gui.hxx>
+#include <Model/acmodel.hxx>
+#include <Model/modelmgr.hxx>
+#include <MultiPlayer/multiplaymgr.hxx>
+#include <Navaids/awynet.hxx>
+#include <Scenery/scenery.hxx>
+#include <Scenery/tilemgr.hxx>
#include "globals.hxx"
#include "renderer.hxx"
// Destructor
FGGlobals::~FGGlobals()
{
- delete soundmgr;
- delete subsystem_mgr;
- delete event_mgr;
- delete initial_state;
- delete props;
- delete io;
- delete fontcache;
delete renderer;
- delete initial_waypoints;
+// The AIModels manager performs a number of actions upon
+ // Shutdown that implicitly assume that other subsystems
+ // are still operational (Due to the dynamic allocation and
+ // deallocation of AIModel objects. To ensure we can safely
+ // shut down all subsystems, make sure we take down the
+ // AIModels system first.
+ subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("ai_model");
+ delete subsystem_mgr;
+ delete event_mgr;
+ delete time_params;
+ delete ephem;
+ delete mag;
+ delete matlib;
+ delete route_mgr;
+ delete current_panel;
+ delete soundmgr;
+ delete airports;
+
+ delete runways;
+ delete ATC_mgr;
+ delete AI_mgr;
+ delete controls;
+ delete viewmgr;
+
+ delete initial_state;
+// //delete locale; Don't delete locale
+// delete commands;
+ delete model_lib;
+ delete acmodel;
+ delete model_mgr;
+ delete channel_options_list;
+ delete initial_waypoints;
+ delete scenery;
+ //delete tile_mgr; // Don't delete tile manager yet, because loader thread problems
+ delete io;
+ delete fontcache;
+
+ delete navlist;
+ delete loclist;
+ delete gslist;
+ delete dmelist;
+ delete mkrlist;
+ delete tacanlist;
+ delete carrierlist;
+ delete channellist;
+ delete fixlist;
+ delete airwaynet;
+ delete multiplayer_mgr;
+
+ delete props;
}
FGNavList::~FGNavList( void )
{
+ navaids_by_tile.erase( navaids_by_tile.begin(), navaids_by_tile.end() );
+ nav_list_type navlist = navaids.begin()->second;
+ navaids.erase( navaids.begin(), navaids.end() );
}
// load the navaids and build the map
bool FGNavList::init()
{
- // FIXME: leaves all the individual navaid entries leaked
+ // No need to delete the original navaid structures
+ // since we're using an SGSharedPointer
+ nav_list_type navlist = navaids.begin()->second;
navaids.erase( navaids.begin(), navaids.end() );
navaids_by_tile.erase( navaids_by_tile.begin(), navaids_by_tile.end() );
ident_navaids.erase( ident_navaids.begin(), ident_navaids.end() );
// front end for add a marker beacon
static void tile_add( nav_map_type &navmap, FGNavRecord *n )
{
- double diff;
+ double diff = 0;
double lon = n->get_lon();
double lat = n->get_lat();
#include <simgear/compiler.h>
#include <simgear/misc/sg_path.hxx>
+#include <simgear/structure/SGSharedPtr.hxx>
+#include <simgear/structure/SGReferenced.hxx>
#include <map>
#include <vector>
// FGNavList ------------------------------------------------------------------
-
-typedef vector < FGNavRecord* > nav_list_type;
+typedef SGSharedPtr<FGNavRecord> nav_rec_ptr;
+typedef vector < nav_rec_ptr > nav_list_type;
typedef nav_list_type::iterator nav_list_iterator;
typedef nav_list_type::const_iterator nav_list_const_iterator;
// FGTACANList ----------------------------------------------------------------
-
-typedef vector < FGTACANRecord* > tacan_list_type;
+typedef SGSharedPtr<FGTACANRecord> tacan_rec_ptr;
+typedef vector < tacan_rec_ptr > tacan_list_type;
typedef map < int, tacan_list_type > tacan_map_type;
typedef map < string, tacan_list_type > tacan_ident_map_type;
#include <simgear/magvar/magvar.hxx>
#include <simgear/timing/sg_time.hxx>
+#include <simgear/structure/ssgSharedPtr.hxx>
+#include <simgear/structure/SGReferenced.hxx>
+
#ifdef SG_HAVE_STD_INCLUDES
# include <istream>
#elif defined( __BORLANDC__ ) || (__APPLE__)
FG_NAV_ANY
};
-class FGNavRecord {
+class FGNavRecord : public SGReferenced {
int type;
SGGeod pos; // location in geodetic coords (degrees)
return in;
}
-class FGTACANRecord {
+class FGTACANRecord : public SGReferenced {
string channel;
int freq;