add copy_ctor and move_ctor