std::swap can saves some lines of code, and less code means less to maintain
As C++11 is the adopted standard, trivial constructors are not needed, compiler can generate it for us.