Общие ситуации:
- Передача std::string функции foo (std::string *) или foo (std::string &);
- Передача tr1:: shared_ptr функции foo (tr1:: shared_ptr * ptr) или foo (tr1:: shared_ptr & ptr);
В общем, что такое хорошая практика. Я всегда смущаюсь. Во-первых, передача всего, поскольку ссылки кажутся согласованными, однако в Литералах невозможно передать ссылки или NULL в качестве ссылок.
Точно так же, имея все как указатели, кажется хорошим, но с этим мне приходится беспокоиться о том, что указатели могут указывать на NULL и проверять эти условия в начале этой функции.
Как вы думаете, хороший сниппл?
#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;
}
Спасибо Аджай