Чтобы создать код, я рисую диаграмму типа UML. У меня есть некоторые общие объекты, и мне интересно, как это должно быть нарисовано, поскольку владение этими объектами действительно разделяется. Чтобы быть более конкретным здесь пример C++, что происходит:Как представить общие объекты в UML?
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). Вы не хотите создавать несколько ресурсов, поскольку они имеют отношение 1 к 1 с аппаратными модулями, но не нужно хранить их в A, поскольку они ничего не делают с ними, кроме инициализации и перехода к Bi. –
Хорошо, если есть более одного 'B', что имеет больше смысла, и я не заметил, что' A' не хранит общий объект. –