View Full Version : C++: Quando puņ bastare il costruttore di copia default ?
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.
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?
Originally posted by "verloc"
il costruttore di copia di default mi dovrebbe copiare pari pari
In pratica non serve ridefinirlo quando se lo scrivessi ti verrebbe una sequenza di assegnazioni...
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;
Si.
Puoi essere + preciso su cosa intendi per attributi?
Sono i membri dati della classe (nel tuo caso sono itsBase, itsHeight etc..).
Ciao.
Grazie ragazzi,mi avete veramente chiarito le idee. :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.