Puoi restituire il puntatore a vComputer od il suo riferimento: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:
e poi ho aggiunto i metodi:codice:private: vector<Computer> vComputer;
Nella classe Computer.cpp ho implementato i metodi in questo modo:codice:void addComputer(Computer _computer); vector<Computer> getVectorComputer();
tutto ok funziona, ma se per caso questo vettore fosse molto grande e non vorrei passarlo per valore quale tecnica dovrei usare?codice:void Computer::addComputer(Computer _computer){ vComputer.push_back(_computer); } vector<Computer> Computer::getVectorComputer(){ return vComputer; }
Grazie per il supporto.
in entrambi i casi viene NON viene copiato il vettore.codice:vector<Computer> * Computer::getVectorComputerPointer(){ return &vComputer; } vector<Computer> & Computer::getVectorComputerRef(){ return vComputer; }
Ma attenzione:
nel terzo caso, pur chiamando getVectorComputerRef, il chiamante costruisce una copia di vComputer di Computer.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; }

Rispondi quotando