Quando ho letto il costruttore di copie e il costruttore di assegnazioni di copie, ciò che ottengo è che entrambi trasmettono le loro proprietà l'una all'altra. E, entrambi sono dichiarati implicitamente dal compilatore (se non definito). Quindi, entrambi devono esistere, sia che facciano qualcosa di utile o no.Quando è stato chiamato l'operatore di assegnazione copia?
Poi ho provato questo codice:
#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;
}
ma sembra l'operatore di assegnazione di copia non si chiama affatto. Ho provato con tre condizioni:
Tutto incluso. Stampa:
// Default constructor // Copy constructor // Copy constructor # Why not prints out "Copy assignment operator"?
Se l'operatore di assegnazione copia non esegue la copia del costruttore. Stampa:
// Default constructor // Copy constructor // Copy constructor # Why it's printed out even though I didn't define it?
Se non è possibile copiare il costruttore di copia, basta copiare l'operatore di assegnazione. Stampa:
// Default constructor # Why "Copy assignment operator" is not printed out?
Unico costruttore. Esso stampa:
// Default constructor # Understandable
Quindi, è come il compilatore non importava neanche se io definisco l'operatore di assegnamento per copia o meno. Nessuno dei quattro esempi sopra mostra "Copy assignment operator". E quindi, quando ha chiamato se esiste davvero e ha un significato?
'c' è un nuovo oggetto quindi è copy constrcut – billz