... che fa una copia del contenuto del puntatore str di s1 in quello di s2.
In realtà è il contrario.
Forse perché il costruttore di copia interviene solo se presente un'inizializzazione? Nel nostro caso l'oggetto è stato creato prima quindi si parla di assegnamento. E' corretta la mia interpretazione?
Esatto.
Va precisato cmq che oltre all'inizializzazione, il costruttore di copia viene invocato anche nel passaggio by value di un argomento a una funzione e nella restituzione by value del valore di ritorno di una funzione. Quindi la risposta a tutte le domande fatte nel secondo post è si.
Per la cronaca le seguenti righe di codice sono equivalenti:
stringa c1 = c2;
stringa c1(c2);
stringa c1 = stringa(c2);
Una precisazione, nei prototipi dei metodi i nomi degli argomenti non servono.
Approfitto del topic per fare anche io una domanda.
Considerando il funzionamento dell'operatore di assegnamento di default, come mai il seguente codice stampa
indirizzo_obj_1 - indirizzo_obj_2
indirizzo_obj_1 - indirizzo_obj_2
e non
indirizzo_obj_1 - indirizzo_obj_2
indirizzo_str_2 - indirizzo_str_2
?
#include <iostream>
#include <string.h>
using namespace std;
class stringa
{
public:
char *str;
stringa(const char*);
~stringa();
};
stringa::stringa(const char *s)
{
str = new char[strlen(s) + 1];
strcpy(str, s);
}
stringa::~stringa()
{
delete[] str;
}
int main()
{
stringa s1("vino");
stringa s2("birra");
s1 = s2;
cout << &s1 << " - " << &s2 << endl;
cout << &s1.str << " - " << &s2.str;
}