Объект против ссылки для членов класса и внедрения зависимостейC++

Программы на C++. Форум разработчиков
Anonymous
Объект против ссылки для членов класса и внедрения зависимостей

Сообщение Anonymous »

Я новичок в 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

Вернуться в «C++»