[Bf-blender-cvs] [cae115835f1] temp-derived-node-tree-refactor: destructor

Jacques Lucke noreply at git.blender.org
Wed Mar 3 09:57:02 CET 2021


Commit: cae115835f1368560999522aa54663da91c98c2e
Author: Jacques Lucke
Date:   Wed Mar 3 08:17:49 2021 +0100
Branches: temp-derived-node-tree-refactor
https://developer.blender.org/rBcae115835f1368560999522aa54663da91c98c2e

destructor

===================================================================

M	source/blender/nodes/NOD_XXX_node_tree.hh
M	source/blender/nodes/intern/xxx_node_tree.cc

===================================================================

diff --git a/source/blender/nodes/NOD_XXX_node_tree.hh b/source/blender/nodes/NOD_XXX_node_tree.hh
index 162740cb21c..fbc9bdf1c5a 100644
--- a/source/blender/nodes/NOD_XXX_node_tree.hh
+++ b/source/blender/nodes/NOD_XXX_node_tree.hh
@@ -20,16 +20,22 @@
 
 namespace blender::nodes {
 
+class XXXNodeTree;
+
 class XXXNodeTreeContextInfo {
  private:
   XXXNodeTreeContextInfo *parent_;
   NodeTreeRef *tree_;
   Map<const NodeRef *, XXXNodeTreeContextInfo *> children_;
+
+  friend XXXNodeTree;
 };
 
 class XXXNodeTreeContext {
  private:
   XXXNodeTreeContextInfo *context_;
+
+  friend XXXNodeTree;
 };
 
 struct XXXNode {
@@ -60,6 +66,9 @@ class XXXNodeTree {
  public:
   XXXNodeTree(bNodeTree *btree, NodeTreeRefMap &node_tree_refs);
   ~XXXNodeTree();
+
+ private:
+  void destruct_context_info_recursively(XXXNodeTreeContextInfo *context_info);
 };
 
 }  // namespace blender::nodes
diff --git a/source/blender/nodes/intern/xxx_node_tree.cc b/source/blender/nodes/intern/xxx_node_tree.cc
index fe0d95e1848..af6a50ebaf9 100644
--- a/source/blender/nodes/intern/xxx_node_tree.cc
+++ b/source/blender/nodes/intern/xxx_node_tree.cc
@@ -24,6 +24,16 @@ XXXNodeTree::XXXNodeTree(bNodeTree *btree, NodeTreeRefMap &node_tree_refs)
 
 XXXNodeTree::~XXXNodeTree()
 {
+  /* Has to be destructed manually, because the context info is allocated in a linear allocator. */
+  this->destruct_context_info_recursively(root_context_info_);
+}
+
+void XXXNodeTree::destruct_context_info_recursively(XXXNodeTreeContextInfo *context_info)
+{
+  for (XXXNodeTreeContextInfo *child : context_info->children_.values()) {
+    destruct_context_info_recursively(child);
+  }
+  context_info->~XXXNodeTreeContextInfo();
 }
 
 }  // namespace blender::nodes



More information about the Bf-blender-cvs mailing list