ソースを参照

fix review finding: fix resource leak.

Kim Kulling 6 年 前
コミット
92bb0febdf
1 ファイル変更23 行追加18 行削除
  1. 23 18
      code/IRRLoader.cpp

+ 23 - 18
code/IRRLoader.cpp

@@ -89,14 +89,16 @@ static const aiImporterDesc desc = {
 // ------------------------------------------------------------------------------------------------
 // Constructor to be privately used by Importer
 IRRImporter::IRRImporter()
-    : fps(),
-    configSpeedFlag()
-{}
+: fps()
+, configSpeedFlag(){
+    // empty
+}
 
 // ------------------------------------------------------------------------------------------------
 // Destructor, private as well
-IRRImporter::~IRRImporter()
-{}
+IRRImporter::~IRRImporter() {
+    // empty
+}
 
 // ------------------------------------------------------------------------------------------------
 // Returns whether the class can handle the format of the given file.
@@ -107,9 +109,9 @@ bool IRRImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool
     } else if (extension == "xml" || checkSig) {
         /*  If CanRead() is called in order to check whether we
          *  support a specific file extension in general pIOHandler
-         *  might be NULL and it's our duty to return true here.
+         *  might be nullptr and it's our duty to return true here.
          */
-        if ( nullptr == pIOHandler ) {
+        if (nullptr == pIOHandler ) {
             return true;
         }
         const char* tokens[] = {"irr_scene"};
@@ -290,8 +292,8 @@ void IRRImporter::CopyMaterial(std::vector<aiMaterial*>& materials,
 
 
 // ------------------------------------------------------------------------------------------------
-inline int ClampSpline(int idx, int size)
-{
+inline
+int ClampSpline(int idx, int size) {
     return ( idx<0 ? size+idx : ( idx>=size ? idx-size : idx ) );
 }
 
@@ -310,7 +312,7 @@ inline void FindSuitableMultiple(int& angle)
 // ------------------------------------------------------------------------------------------------
 void IRRImporter::ComputeAnimations(Node* root, aiNode* real, std::vector<aiNodeAnim*>& anims)
 {
-    ai_assert(NULL != root && NULL != real);
+    ai_assert(nullptr != root && nullptr != real);
 
     // XXX totally WIP - doesn't produce proper results, need to evaluate
     // whether there's any use for Irrlicht's proprietary scene format
@@ -521,7 +523,8 @@ void IRRImporter::ComputeAnimations(Node* root, aiNode* real, std::vector<aiNode
                     // We have no point in the spline. That's bad. Really bad.
                     ASSIMP_LOG_WARN("IRR: Spline animators with no points defined");
 
-                    delete anim;anim = nullptr;
+                    delete anim;
+                    anim = nullptr;
                     break;
                 }
                 else if (size == 1) {
@@ -905,8 +908,9 @@ void IRRImporter::InternReadFile( const std::string& pFile,
     std::unique_ptr<IOStream> file( pIOHandler->Open( pFile));
 
     // Check whether we can read from the file
-    if( file.get() == NULL)
-        throw DeadlyImportError( "Failed to open IRR file " + pFile + "");
+    if (file.get() == nullptr) {
+        throw DeadlyImportError("Failed to open IRR file " + pFile + "");
+    }
 
     // Construct the irrXML parser
     CIrrXML_IOStreamReader st(file.get());
@@ -914,14 +918,14 @@ void IRRImporter::InternReadFile( const std::string& pFile,
 
     // The root node of the scene
     Node* root = new Node(Node::DUMMY);
-    root->parent = NULL;
+    root->parent = nullptr;
     root->name = "<IRRSceneRoot>";
 
     // Current node parent
     Node* curParent = root;
 
     // Scenegraph node we're currently working on
-    Node* curNode = NULL;
+    Node* curNode = nullptr;
 
     // List of output cameras
     std::vector<aiCamera*> cameras;
@@ -1048,7 +1052,7 @@ void IRRImporter::InternReadFile( const std::string& pFile,
                     continue;
                 }
 
-                Animator* curAnim = NULL;
+                Animator* curAnim = nullptr;
 
                 // Materials can occur for nearly any type of node
                 if (inMaterials && curNode->type != Node::DUMMY)    {
@@ -1353,7 +1357,7 @@ void IRRImporter::InternReadFile( const std::string& pFile,
                     }
                     else curParent = curParent->parent;
                 }
-                else curNode = NULL;
+                else curNode = nullptr;
             }
             // clear all flags
             else if (!ASSIMP_stricmp(reader->getNodeName(),"materials"))    {
@@ -1479,7 +1483,8 @@ void IRRImporter::InternReadFile( const std::string& pFile,
     /* Finished ... everything destructs automatically and all
      * temporary scenes have already been deleted by MergeScenes()
      */
-    return;
+
+    delete root;
 }
 
 #endif // !! ASSIMP_BUILD_NO_IRR_IMPORTER