diff --git a/src/OpenMesh/Core/IO/IOManager.cc b/src/OpenMesh/Core/IO/IOManager.cc index 0a970e65..889f2f6e 100644 --- a/src/OpenMesh/Core/IO/IOManager.cc +++ b/src/OpenMesh/Core/IO/IOManager.cc @@ -63,23 +63,22 @@ namespace IO { //============================================================================= - -_IOManager_ *__IOManager_instance = 0; - +// Destructor never called. Moved into singleton getter function +// _IOManager_ *__IOManager_instance = 0; _IOManager_& IOManager() { - if (!__IOManager_instance) - __IOManager_instance = new _IOManager_(); + static _IOManager_ __IOManager_instance; - return *__IOManager_instance; + //if (!__IOManager_instance) + // __IOManager_instance = new _IOManager_(); + + return __IOManager_instance; } - //----------------------------------------------------------------------------- - bool _IOManager_:: read(const std::string& _filename, BaseImporter& _bi, Options& _opt) diff --git a/src/OpenMesh/Core/IO/IOManager.hh b/src/OpenMesh/Core/IO/IOManager.hh index 7f236f74..4654bb27 100644 --- a/src/OpenMesh/Core/IO/IOManager.hh +++ b/src/OpenMesh/Core/IO/IOManager.hh @@ -101,13 +101,19 @@ class OPENMESHDLLEXPORT _IOManager_ { private: + /// Constructor has nothing todo for the Manager _IOManager_() {} + + /// Destructor has nothing todo for the Manager + ~_IOManager_() {}; + + /** Declare the singleton getter function as friend to access the private constructor + and destructor + */ friend OPENMESHDLLEXPORT _IOManager_& IOManager(); - public: - /** Read a mesh from file _filename. The target data structure is specified by the given BaseImporter. The \c read method consecutively queries all @@ -247,12 +253,10 @@ private: //============================================================================= -extern _IOManager_* __IOManager_instance; +//_IOManager_* __IOManager_instance; Causes memory leak, as destructor is never called OPENMESHDLLEXPORT _IOManager_& IOManager(); - - //============================================================================= } // namespace IO } // namespace OpenMesh