Added copy-assignment
Added support for move semantic