It does, it's just not calling the default constructor. it's calling the copy constructor. Since you did not provide a copy constructor it's just using the compiler-provided version.
calling...
i: 0
copy constructor...
i : 1
destructor...
destructor...
And I get the same output by changing the operator to a return by reference. Where's that temporary object? Why isn't there an extra call to the copy/destructor? I'm sorry if this seems obvious... and thank you so much for your help!!
I do this when I'm feeling lazy: ++ ++i
But other than that and what clanmjc mentioned, it's just for a performance gain in the case of a compiler that doesn't optimize it. And just as with all overloadable operators, it can do and return anything it wants, but it's recommended to be used for its intended purpose.