operator =

Оператор присваивания operator= не является конструктором (хотя бы из названия).

фотка 1
class A
{
public:
    A() // конструктор по умолчанию обычный
    {
        qDebug() << "A() this:" << this << " // easy default ctor";
    }
    A(const A& in) // конструктор по умолчанию копирования
    {
        qDebug() << "A(const A& in) " << " this:" << this << " // default copy ctor";
    }
    A& operator= (const A &cl);

    ~A()
    {
        qDebug() << "~A " << this;
    }
};

A& A::operator=(const A &cl)
{
    qDebug() << "A& A::operator=(const A &cl)";
    return *this;
}

void foo()
{
    A clA;
    A clB = clA; // вызывается конструктор копирования
    clB = clA;   // вызывается оператор присваивания

    qDebug() << "<- foo()";
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    qDebug() << "--------main()---------";

    qDebug() << "-> foo()";
    foo();
    qDebug() << "return from foo()";
    return a.exec();
}

A clB = clA; вызывает конструктор (копирования). Это связано с тем, что clB еще не создан. Компилятор должен создать clB конструктором по умолчанию (обычным) и инициализировать его данными класса A (буквально побитово). А это и есть роль конструктора копирования. Поэтому компилятор вызывает конструктор копирования. Такие нюансы конечно же путают немного, но все есть дело привычки, проходит время и если все работает правильно человек привыкает.

Еще вот на картинке можно посмотреть (мы тренируемся в среде Qt 4.8.1 msvc-2010):

 

фотка 2

Чтобы все таки оператор присваивания вызывался строку A clB = clA; можно заменить на две строчки  A clB;  и  clB= clA; и тогда во второй строке вызовется оператор присваивания:

void foo()
{
    A clA;
    A clB; // вызывается конструктор обычный
    clB = clA;   // вызывается оператор присваивания

    qDebug() << "<- foo()";
}
вывод консоли:
--------main()---------
-> foo()
A() this: 0x7af9fe  // easy default ctor
A() this: 0x7af9ff  // easy default ctor
A& A::operator=(const A &cl)
<- foo()
~A  0x7af9ff
~A  0x7af9fe
return from foo()

Результат получется аналогичный.