【发布时间】:2017-03-18 02:54:08
【问题描述】:
为了设计我的代码,我正在绘制一些 UML 类图。 我有一些共享对象,我想知道应该如何绘制,因为这些对象的所有权是真正共享的。 更具体地说,这里有一个 C++ 示例来说明正在发生的事情:
class A
{
public:
A(){
std::shared_ptr<CSharedObj> sharedObj = std::make_shared<CSharedObj>;
mB = B(sharedObj);
}
private:
B mB;
};
class B
{
public:
B(std::shared_ptr<CSharedObj>);
private:
std::shared_ptr<CSharedObj> mSharedObj;
};
class CSharedObj
{
public:
CSharedObj();
};
如何在类图中表示这 3 个类之间的关系?
【问题讨论】:
-
为什么
B需要CSharedObj的共享所有权?B的生命周期与A的生命周期相同,因此它可以安全地拥有一个指向CSharedObj的非拥有指针,不是吗? -
你说的理论上是对的,但是架构比上面的例子复杂一点。这个想法是 A 创建所需的一切并将其分配给每个子组件(假设我们有 B1、B2、B3、...、Bn 共享 A 创建的一些资源)。您不想创建多个资源,因为它们与硬件模块具有一对一的关系,但也不需要将它们存储在 A 中,因为除了初始化和传递给 Bi 之外,它不会对它们做任何事情。
-
好的,如果有多个
B就更有意义了,而且我没有发现A不存储共享对象。 -
你在哪里看到 3 个类?只有两个,即
A和B。 -
第三类是CSharedObject。我没有写定义,因为它是一个微不足道的定义(类 CSharedObject {};),而且很明显它是一种类型而不是实例,因为它是 shared_ptr 的模板参数。
标签: object uml shared-ptr class-diagram shared-objects