Architecture 如何处理场景图的创建

Architecture 如何处理场景图的创建,architecture,d,scene,scenegraph,Architecture,D,Scene,Scenegraph,我目前正在设计一个场景图,但我遇到了一个问题 创建场景图时,我会创建一个展开的链表来保存子节点。场景图的设计允许使用自定义分配器,场景使用自定义分配器初始化并作为成员变量携带 目前,我有许多名为make*的函数,它们接收场景,以及节点可能具有的任何参数(即makeGroup(scene,null))。我的问题是:我可以使用什么方法来创建节点,同时删除不必要的膨胀 到目前为止,我提出了两种解决方案: 仅在创建和销毁时将分配器传递给节点。节点本身不保留对分配器的引用。只有创建它的场景才会这样做。这在

我目前正在设计一个场景图,但我遇到了一个问题

创建场景图时,我会创建一个展开的链表来保存子节点。场景图的设计允许使用自定义分配器,场景使用自定义分配器初始化并作为成员变量携带

目前,我有许多名为
make*
的函数,它们接收场景,以及节点可能具有的任何参数(即
makeGroup(scene,null)
)。我的问题是:我可以使用什么方法来创建节点,同时删除不必要的膨胀

到目前为止,我提出了两种解决方案:

  • 仅在创建和销毁时将分配器传递给节点。节点本身不保留对分配器的引用。只有创建它的场景才会这样做。这在创建过程中需要一些额外的噪声,尽管它可以很容易地隐藏在
    make
    函数中

  • 允许节点携带对分配器本身的引用,增加节点类内的依赖性,并向类添加另一个成员


  • 我想所有make*函数都可以成为构造函数……我可以,但这隐含着第二种解决方案,因为D不允许您将参数传递给析构函数。您可以使用struct,或者依赖GC删除未使用的引用……我不希望使用GC(因此使用分配器)。每个节点为其子节点分配一个列表,所以我需要以某种方式清理它。我不希望对每个节点都使用两个阶段的释放过程。我想你不想使用struct?我想所有make*函数都可以成为构造函数…我可以,但这隐含着第二种解决方案,因为d不允许你将参数传递给析构函数。好吧,你可以使用struct,或者依赖GC来删除未使用的引用……我宁愿不使用GC(因此使用分配器)。每个节点为其子节点分配一个列表,所以我需要以某种方式清理它。我不希望对每个节点都使用两个阶段的释放过程。我想您不想使用结构?