所以我只是陷入了一些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个破坏力。这是怎么回事?方式我看到它,我创建b
时使用匿名变量A(0)
作为输入。不确定事物的顺序是什么。创建一个对匿名变量的引用并用于复制(复制构造函数将在初始化程序列表中调用,是吗?)成员变量a
。匿名变量何时销毁?一般来说,为什么我会看到2个构造函数和3个析构函数。谢谢。
他们亲切地称为临时变量++年底被破坏。 –
而不是匿名变量? – gone