以下几种情况又会匿名对象
(1)对象构造 与 匿名对象
Test t1 = Test();
这时,Test()会构造匿名对象,并且是调用无参构造函数,然后 t1 将匿名对象扶正。
(2)对象赋值 与 匿名对象
Test t1(1,2); t1 = Test(2,3);
Test(2,3),调用有参构造函数,构造匿名对象,然后调用赋值函数,最后匿名对象析构。
(3)函数返回 与 匿名对象
Test func() { Test t1(1,2); return t1; } main() { Test test1 = func(); Test test2; test2 = func(); }
t1返回时,使用拷贝构造函数构造匿名对象,由于test1是构造,所以匿名对象不会析构,而test2赋值后,匿名对象会析构。
(4)构造函数中调用构造函数
class Test { private: int _a, _b; public: Test(int a, int b) { _a = a; _b = b; Test(1, 2); } } main() { Test(3, 4); }
结果是,_a=3,_b=4。Test(1,2)这里会构造出一个匿名对象,然后马上析构。