gpt4 book ai didi

c++ - 类图: Can I share a composition?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:16 26 4
gpt4 key购买 nike

假设我正在使用 mvc 模式在 C++ 中制作一个简单的游戏,并且有一个世界对象,其生命周期由 Controller 类管理。这显然像是一个组合,但是如果说游戏逻辑类也需要对同一个世界的永久引用,或者这个世界的环境(世界拥有者)需要对其的引用,这些只是常规关联吗还是我应该进行所有共享聚合?

让我感到困惑的是合成被定义为“非共享”。但这是否意味着不与任何其他关系共享,或者仅不与其他聚合和组合共享。另外,共享聚合通常如何在 C++ 中实现?我的意思是,必须有人管理生命周期。现在我们可以使用 shared_ptr,但是如果没有它们,所有共享的东西都只是在 main 中创建并从那里传递(和销毁)吗?这让我想知道;在类图中对 Controller 建模是否错误,是否应该只对模型部分进行建模?

作为我的主要问题的另一个例子(是否允许在 uml 类图中与任何其他类型的关系共享复合 Material )例如汽车上的轮子可以与其他物体共用吗?如果引擎需要永久引用,应该如何建模?一个简单的关联?

最佳答案

是的,这是可能的,最好的例子之一就是游泳池(结构,而不是有水的结构......)。在池中,池管理器与所有元素具有组合关系。池管理器根据需要管理元素到“用户”的分配。用户现在正在共享这些聚合元素。

重要的是要注意池管理器是池元素的所有者,因此负责它们的创建和销毁(根据需要将池维持在规定的限制内)并且需要跟踪它们的分配。池元素也只能有一个所有者。在这种情况下,池的用户只能借用和归还一个元素。

在你的场景中,我怀疑你可以使用聚合或只是一个简单的关联,记住对象的所有者(具有组合的人)可以销毁它......

关于c++ - 类图: Can I share a composition?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25227742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com