Анонимные переменные, передаваемые по ссылке, списки инициализаторов

Так что я просто увлекся некоторыми неприятностями C ++. В частности, передача анонимных переменных по ссылке для использования в списке инициализатора для класса в C ++. Рассмотрим следующий код;

class A {
public:
int x;

A(int x=0) : x(x) {
std::cout <<"A: creatred\n";
}

~A() {
std::cout << "A: destroyed\n";
}
};

class B {
public:
A a;

B(const A& in) : a(in) {
std::cout <<"B: creatred\n";
}

~B() {
std::cout << "B: destroyed\n";
}
};

int main() {
B b(A(0));
std::cout << "END\n";
return 0;
}

выходы:

A: creatred
B: creatred
A: destroyed
END
B: destroyed
A: destroyed

Я считаю 2 творения и 3 разрушения. В чем дело? Как я вижу, я использую анонимную переменную A(0) в качестве входных данных при создании b, Не уверен, что порядок вещей сейчас. Ссылка на анонимную переменную создается и используется для копирования (конструктор копирования будет вызываться в списке инициализаторов, да?) Переменная-член a, Когда анонимная переменная уничтожается? И вообще, почему я вижу 2 вызываемых конструктора и 3 деструктора. Благодарю.

1

Решение

Ты не переопределил AКопировать конструктор для печати сообщения …

В частности, a(in) вызывает это.

4

Другие решения

Отсутствующий конструктор будет копирующим конструктором для A.

Вы копируете конструкцию A в строке ниже.

B(const A& in) : a(in)

A: destroyed
END

Это временное уничтожение, оно уничтожается в конце строки

B b(A(0));
3

По вопросам рекламы [email protected]