Так что я просто увлекся некоторыми неприятностями 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 деструктора. Благодарю.
Ты не переопределил A
Копировать конструктор для печати сообщения …
В частности, a(in)
вызывает это.
Отсутствующий конструктор будет копирующим конструктором для A.
Вы копируете конструкцию A в строке ниже.
B(const A& in) : a(in)
A: destroyed
END
Это временное уничтожение, оно уничтожается в конце строки
B b(A(0));