Quando é chamado o operador de atribuição de cópias?

Quando leio sobre o construtor de cópias e o construtor de atribuição de cópias, o que entendi é que ambos cedem suas propriedades um ao outro e que ambos são declarados implicitamente pelo compilador (se não definido). Portanto, ambos devem existir, fazendo algo útil ou não.

Então eu testei este código:

#include <iostream>

using namespace std;

class Test {
public:
    Test () {
        cout << "Default constructor" << endl;
    }

    Test (const Test& empty) {
        cout << "Copy constructor" << endl;
    }

    Test& operator=(const Test& empty) {
        cout << "Copy assignment operator" << endl;
    }
private:

};

int main () {
    Test a;     // Test default constructor
    Test b (a); // Test copy constructor
    Test c = b; // Test copy assignment constructor
    system ("pause");
    return 0;
}

Mas parece que o operador de atribuição de cópia não é chamado. Eu tentei com três condições:

Tudo incluído. Imprime:

// Default constructor
// Copy constructor
// Copy constructor    # Why not prints out "Copy assignment operator"?

O operador de atribuição de cópia sem cópia apenas copia o construtor. Imprime:

// Default constructor
// Copy constructor
// Copy constructor    # Why it's printed out even though I didn't define it?

O construtor de cópias sem cópia apenas copia o operador de atribuição. Imprime:

// Default constructor # Why "Copy assignment operator" is not printed out?

Somente construtor. Imprime:

// Default constructor # Understandable

Então, é como se o compilador nem se importasse se eu definisse o operador de atribuição de cópia ou não. Nenhum dos quatro exemplos acima imprime "Operador de atribuição de cópia". Então, quando foi chamado, se realmente existe e tem um significado?

questionAnswers(1)

yourAnswerToTheQuestion