1. The copy construct function creates a new object, while the assign function assigns an object to an existed object.
2. The assign function needs to check if the assignment source and destination are the same, while the copy construct function does not need to do so.
3. The assign function needs to return *this in order to support chain assignment.
4. The assign function needs to free the exist memory space of the destination object.