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?