s sam 调用构造函数 i == 0, a == 1
show(sam) 非引用传递 调用复制构造函数 i == 1, a == 2
return sam 返回sam副本 调用复制构造函数 i == 2, a == 3
析构时
首先析构show(sam),sam离开局函数作用域,就是第一次调用复制构造函数得到的对象
所以是析构1
接着析构函数返回的sam,这个sam是来自show中的副本,虽然你没有用,但是还是被返回到main中
出main作用域后被析构,所以是析构2
最后析构22行定义的sam,来自构造函数的sam 所以是析构0