Add assignment operator, copy constructor, move constructor and others