Wann als Referenz übergeben und wann als Zeiger in C ++ übergeben?

Häufige Situationen:

Std :: string an eine Funktion übergeben foo (std :: string *) oder foo (std :: string &);Tr1 :: shared_ptr an eine Funktion übergeben foo (tr1 :: shared_ptr * ptr) oder foo (tr1 :: shared_ptr & ptr);

Im Allgemeinen, was ist eine gute Praxis. Ich werde immer verwirrt. Auf den ersten Blick scheint es konsistent zu sein, alles als Referenzen zu übergeben. Es ist jedoch nicht möglich, Literale als Referenzen oder Nullen als Referenzen zu übergeben.

Ähnlich scheint es gut zu sein, alles als Zeiger zu haben, aber dann muss ich mir Sorgen machen, dass Zeiger möglicherweise auf NULL zeigen, und zu Beginn dieser Funktion nach diesen Bedingungen suchen.

Findest du das folgende Snippet gut?

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

Danke Ajay

Antworten auf die Frage(16)

Ihre Antwort auf die Frage