所以我只是陷入了一些 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 个析构函数。谢谢。