[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