Alex Szpakowski avatar Alex Szpakowski committed c49b070

Modules now properly remove themselves from the global registry when they're deleted

Comments (0)

Files changed (2)

src/common/Module.cpp

 namespace love
 {
 
+Module::~Module()
+{
+	std::map<std::string, Module*>::iterator it;
+
+	// We can't use the overridden Module::getName() in this destructor.
+	for (it = registry.begin(); it != registry.end(); ++it)
+	{
+		if (it->second == this)
+		{
+			registry.erase(it);
+			break;
+		}
+	}
+}
+
 void Module::registerInstance(Module *instance)
 {
 	if (instance == NULL)
 
 	std::map<std::string, Module*>::iterator it = registry.find(name);
 
-	if (registry.end() != it)
+	if (it != registry.end())
 	{
 		if (it->second == instance)
 			return;

src/common/Module.h

 	/**
 	 * Destructor.
 	 **/
-	virtual ~Module() {};
+	virtual ~Module();
 
 	/**
 	 * Gets the name of the module. This is used in case of errors
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.