浏览代码

Use weak pointer for ElemBase last to avoid memory leak

Turo Lamminen 3 年之前
父节点
当前提交
30555282fe
共有 2 个文件被更改,包括 4 次插入2 次删除
  1. 3 1
      code/AssetLib/Blender/BlenderScene.cpp
  2. 1 1
      code/AssetLib/Blender/BlenderScene.h

+ 3 - 1
code/AssetLib/Blender/BlenderScene.cpp

@@ -624,7 +624,9 @@ void Structure ::Convert<ListBase>(
         const FileDatabase &db) const {
         const FileDatabase &db) const {
 
 
     ReadFieldPtr<ErrorPolicy_Igno>(dest.first, "*first", db);
     ReadFieldPtr<ErrorPolicy_Igno>(dest.first, "*first", db);
-    ReadFieldPtr<ErrorPolicy_Igno>(dest.last, "*last", db);
+    std::shared_ptr<ElemBase> last;
+    ReadFieldPtr<ErrorPolicy_Igno>(last, "*last", db);
+    dest.last = last;
 
 
     db.reader->IncPtr(size);
     db.reader->IncPtr(size);
 }
 }

+ 1 - 1
code/AssetLib/Blender/BlenderScene.h

@@ -124,7 +124,7 @@ struct ID : ElemBase {
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------
 struct ListBase : ElemBase {
 struct ListBase : ElemBase {
     std::shared_ptr<ElemBase> first;
     std::shared_ptr<ElemBase> first;
-    std::shared_ptr<ElemBase> last;
+    std::weak_ptr<ElemBase> last;
 };
 };
 
 
 // -------------------------------------------------------------------------------
 // -------------------------------------------------------------------------------