Внедрение зависимостей в C ++

Это также вопрос, который я задал в комментарии одного из Мишко Хевери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;
}

Какой ваш предпочтительный подход?

Ответы на вопрос(8)

Ваш ответ на вопрос