だから私は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つのデストラクタが表示されるのですか。ありがとう。