Я новичок в C++, имею опыт работы с C#. Я пытаюсь использовать внедрение зависимостей, обычно используемое в C#, в C++, и меня смущают различные способы объявления зависимостей и их передачи, а также то, почему я буду использовать один вместо другого. Предположим, A зависит от B.
Подход №1 — объявить как объект и взять объект
Код: Выделить всё
class A
{
private:
B _b;
public:
A(B b): _b(b) { }
void Foo()
{
_b.Bar();
}
}
Подход №2 — объявить объектом и получить ссылку
Код: Выделить всё
class A
{
private:
B _b;
public:
A(B &b): _b(b) { }
void Foo()
{
_b.Bar();
}
}
Подход №3 — объявить ссылку и взять объект — убрать это — неопределенное поведение
Код: Выделить всё
class A
{
private:
B &_b;
public:
A(B b): _b(b) { }
void Foo()
{
_b.Bar();
}
}
Подход №4 — объявить ссылкой и использовать ссылку
Код: Выделить всё
class A
{
private:
B &_b;
public:
A(B &b): _b(b) { }
void Foo()
{
_b.Bar();
}
}
Я попробовал все вышеперечисленное, и все они работают. Есть ли между ними разница? и если да, то почему я должен выбирать одно, а не другое? я предпочитаю номер 1, потому что считаю его наиболее знакомым и интуитивно понятным.
Я нашел здесь похожее обсуждение, но оно больше касается указателей и ссылок.
Подробнее здесь:
https://stackoverflow.com/questions/588 ... -injection