There is an important difference between a copy constructor and the assignment operator. A copy constructor always starts out with an un-initialized object, while the assignment operator starts with a valid object.
This difference becomes important when an object has allocated resources, for example a chunk of memory. A little example will make that point clear. Imagine your class A contains a pointer to some allocated memory:
class A
{
char* m_string;
};
In the constructors you will have to initialize this member, for example
class A
{
public:
A (const A& other)
{
m_string = new char [other.m_string.strlen() + 1];
strcpy (m_string, other.m_string);
}
char* m_string;
};
Now consider an assignment operator. It first has to de-allocate any memory that might have been allocated and then do the assignment.