added move constructor and assignment