situazioni comuni:Quando passare per riferimento e quando passare da un puntatore in C++?
- Passando std :: string a una funzione foo (std :: string *) o foo (std :: string &);
- Passare tr1 :: shared_ptr a una funzione foo (tr1 :: shared_ptr * ptr) o foo (tr1 :: shared_ptr & ptr);
In generale, ciò che è una buona pratica. Mi confondo sempre. All'inizio, passare tutto come riferimenti sembra coerente, tuttavia non è possibile passare in Letterali come riferimenti o NULL come riferimenti.
Allo stesso modo, avere tutto come puntatori sembra buono, ma avendo poi devo preoccuparsi che i puntatori potrebbero essere puntare a NULL e controllare quelle condizioni all'inizio di tale funzione.
Pensi che il seguente frammento sia valido?
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <tr1/memory>
#include <algorithm>
using namespace std;
using namespace std::tr1;
int main(){
map<string, shared_ptr<vector<string> > > adjacencyMap;
vector<string>* myFriends = new vector<string>();
myFriends->push_back(string("a"));
myFriends->push_back(string("v"));
myFriends->push_back(string("g"));
adjacencyMap["s"] = shared_ptr<vector<string> >(myFriends);
return 0;
}
Grazie Ajay
'foo (tr1 :: shared_ptr * ptr)' questo mi sembra molto sbagliato dal punto di vista del buon design a mio parere. sai dei riferimenti costanti? –
Anycorn
Perché non metti 'myFriends' in un puntatore intelligente subito? – GManNickG
Penso che questo sia un duplicato di [Come passare oggetti alle funzioni in C++?] (Http: // StackOverflow.it/questions/2139224/how-to-pass-objects-to-functions-in-c), dove ho già risposto alla domanda generale. – sbi