Originariamente inviato da mlipreri
Riprendo la dichiarazione e implementazione delle classi citate in questo post:
http://forum.html.it/forum/showthrea...8#post11079748
e aggiungo le modifiche sottocitate.
Se nella dichiarazione della classe Computer.h ho dichiarato un vettore in questo modo:
codice:
private:
vector<Computer> vComputer;
e poi ho aggiunto i metodi:
codice:
void addComputer(Computer _computer);
vector<Computer> getVectorComputer();
Nella classe Computer.cpp ho implementato i metodi in questo modo:
codice:
void Computer::addComputer(Computer _computer){
vComputer.push_back(_computer);
}
vector<Computer> Computer::getVectorComputer(){
return vComputer;
}
tutto ok funziona, ma se per caso questo vettore fosse molto grande e non vorrei passarlo per valore quale tecnica dovrei usare?
Grazie per il supporto.
Puoi restituire il puntatore a vComputer od il suo riferimento:
codice:
vector<Computer> * Computer::getVectorComputerPointer(){
return &vComputer;
}
vector<Computer> & Computer::getVectorComputerRef(){
return vComputer;
}
in entrambi i casi viene NON viene copiato il vettore.
Ma attenzione:
codice:
void TestComputer (Computer * theComputer){
typedef vector<Computer> ComputerContainer;
ComputerContainer * aComputerContainerPointer = theComputer->getVectorComputerPointer (); // aComputerContainerPointer punta al membro vComputer di Computer
ComputerContainer & aComputerContainerRef = theComputer->getVectorComputerRef (); // aComputerContainerRef punta al membro vComputer di Computer
ComputerContainer aComputerContainerCopy = theComputer->getVectorComputerRef (); // aComputerContainerCopy è una copia del membro vComputer di Computer;
}
nel terzo caso, pur chiamando getVectorComputerRef, il chiamante costruisce una copia di vComputer di Computer.