------entering main------ Test(): this->buf @ 0x1e1550 Test(): this->buf @ 0x1e1570 ------before call f1------ f1(): Test(const Test&) called. this->buf @ 0x1e1590 a.buf @ 0x1e1590 Test(Test&&) called. this->buf @ 0x1e1590 Test(Test&&) called. this->buf @ 0x1e1590 ~Test(): this->buf @ 0 ~Test(): this->buf @ 0 ------after f1 return------ ------before call f2------ f2(): b.buf @ 0x1e1570 ------after f2 return------ ------before call f3------ f3(): Test(Test&&) called. this->buf @ 0x1e1550 ~Test(): this->buf @ 0 ------after f3 return------ ------exiting main------ ~Test(): this->buf @ 0x1e1590 ~Test(): this->buf @ 0x1e1550 ~Test(): this->buf @ 0x1e1570