|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
C++: Quando può bastare il costruttore di copia default ?
...e quando no?
|
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 428
|
Il costruttore di copia di default copia i singoli attributi usando i relativi costruttori di copia, quindi se i singoli attributi hanno il costruttore di copia che fa' al caso tuo OK altrimenti devi definirli o per le classi dei singoli attributi o devi ridefinire quello della classe che li contiene.
Un esempio di situazioni in cui il costruttore di copia genera dei crash e' quando hai un attributo di tipo puntatore su cui e' allocata memoria. In questo caso succede che sia l'oggetto originale che la copia puntano allo stesso blocco di memoria e quindi le modifiche che fa' uno le vede anche l'altro. Inoltre se il distruttore della classe dealloca la memoria allocata sul puntatore, allora abbiamo due distruttori che deallocano lo stesso blocco, quindi il primo va' bene, il secondo va in crash.
__________________
PC: Phenom 2 955, 4 GB RAM DDR3, 2 x ATI HD 7870 Ghz edition |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Ti faccio vedere la bozza:
//----------------------------------------------------------------------------- // Class CMasonpanel2 // // //----------------------------------------------------------------------------- class CMasonPanel { public: // public accessors CMasonPanel(); CMasonPanel(double Base,double Height,double Tick,double spwght,double tauk,double sigmak); double GetBase(); void SetBase(double Base); double GetHeight(); void SetHeight(double Height); double GetTick(); void SetTick(double Tick); double GetSpWeight(); void SetSpWeight(double spwght); double GetTauK(); void SetTauK(double tauk); double GetSigmaK(); void SetSigmaK(double sigmak); double GetG(); double GetE(); double Area(); // private member data private: double itsBase; double itsHeight; double itsTick; double itsSpWeight; double itsTauK; double itsSigmaK; }; //----------------------------------------------------------------------------- Se ho capito bene non essendoci allocazioni di memoria il costruttore di copia di default mi dovrebbe copiare pari pari questi: // private member data private: double itsBase; double itsHeight; double itsTick; double itsSpWeight; double itsTauK; double itsSigmaK; dimmi se sbaglio. NB devo aggiungere un sacco di cose. Mi sa che devo ridefinire pure gli operatori "=" e "==" perchè devo maneggiare dei vectors bidimensinali di "CMasonPanel". Non badare al costruttore:userò una lista di inzializzazione parametrizzata. Puoi essere + preciso su cosa intendi per attributi? |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#5 | ||
Senior Member
Iscritto dal: Dec 2001
Messaggi: 428
|
Quote:
Quote:
Ciao.
__________________
PC: Phenom 2 955, 4 GB RAM DDR3, 2 x ATI HD 7870 Ghz edition |
||
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Grazie ragazzi,mi avete veramente chiarito le idee.
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:18.