Это также вопрос, который я задал в комментарии в одном из разговоров google Мишко Хевери, посвященном внедрению зависимостей, но он был похоронен в комментариях.
Интересно, как на заводе / сборщике этап соединения зависимостей может работать в C ++.
т.е. у нас есть класс A, который зависит от B. Строитель выделит B в куче, передаст указатель на B в конструкторе A, а также выделит в куче и вернет указатель на A.
Кто убирает потом? Хорошо ли позволить строителю навести порядок после того, как все будет сделано? Кажется, это правильный метод, поскольку в докладе говорится, что сборщик должен настроить объекты, которые ожидаются с одинаковым временем жизни или, по крайней мере, у зависимостей более длительное время жизни (у меня также есть вопрос по этому поводу). Что я имею в виду в коде:
class builder {
public:
builder() :
m_ClassA(NULL),m_ClassB(NULL) {
}
~builder() {
if (m_ClassB) {
delete m_ClassB;
}
if (m_ClassA) {
delete m_ClassA;
}
}
ClassA *build() {
m_ClassB = new class B;
m_ClassA = new class A(m_ClassB);
return m_ClassA;
}
};
Теперь, если есть зависимость, которая, как ожидается, будет длиться дольше, чем время жизни объекта, в который мы внедряем ее (скажем, ClassC - это зависимость), я понимаю, что мы должны изменить метод сборки на что-то вроде:
ClassA *builder::build(ClassC *classC) {
m_ClassB = new class B;
m_ClassA = new class A(m_ClassB, classC);
return m_ClassA;
}
Какой ваш предпочтительный подход?