Quand passer par renvoi et quand passer par un pointeur en C++?

Situations Courantes:

  1. Passant std::string à une fonction foo(std::string*) ou foo(std::string&);
  2. Passant tr1::shared_ptr à une fonction foo(tr1::shared_ptr* ptr) ou foo(tr1::shared_ptr& ptr);

En général, ce qui est une bonne pratique. J'ai toujours confondu. Au premier abord, en passant tout ce que la référence semble cohérent, mais il n'est pas possible de passer dans les Littéraux comme des références ou des valeurs Null comme des références.

De la même façon, tout comme les pointeurs semble bon, mais ayant ensuite j'ai à vous inquiéter que les pointeurs peuvent être pointant vers NULLE et de vérifier ces conditions dans le début de cette fonction.

Pensez-vous de l'extrait de code suivant est la bonne?

#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;
}

Merci
Ajay

InformationsquelleAutor user855 | 2010-08-31