copy constructor and assignment operator