आम हालात:संदर्भ द्वारा कब पास किया जाए और सी ++ में पॉइंटर द्वारा कब पास किया जाए?
- एक समारोह foo (std :: स्ट्रिंग *) या foo (std :: स्ट्रिंग &) को पासिंग std :: स्ट्रिंग;
- पासिंग tr1 :: shared_ptr को फ़ंक्शन foo (tr1 :: shared_ptr * ptr) या foo (tr1 :: shared_ptr & ptr);
सामान्य रूप से, एक अच्छा अभ्यास क्या है। मैं हमेशा भ्रमित हो जाता हूं। सबसे पहले, संदर्भों के रूप में सब कुछ गुजरना लगातार लगता है, हालांकि संदर्भों के संदर्भ में संदर्भों या एनयूएलएल के रूप में पारित करना संभव नहीं है।
इसी तरह, पॉइंटर्स के रूप में सब कुछ अच्छा लगता है, लेकिन तब मुझे चिंता करनी होगी कि पॉइंटर्स न्यूल को इंगित कर रहे हैं और उस कार्य की शुरुआत में उन शर्तों की जांच कर सकते हैं।
क्या आपको लगता है कि निम्न स्निपेट अच्छा है?
#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;
}
धन्यवाद अजय
'foo (tr1 :: shared_ptr * पीआरटी) 'यह मेरी राय में अच्छे डिजाइन के परिप्रेक्ष्य से बहुत गलत लगता है। आप निरंतर संदर्भों के बारे में जानते हैं? –
Anycorn
आप 'myFriends' को तुरंत स्मार्ट पॉइंटर में क्यों नहीं डालते? – GManNickG
मुझे लगता है कि यह एक डुप्लिकेट है [सी ++ में कार्यों को ऑब्जेक्ट कैसे पास करें?] (Http: // stackoverflow।कॉम/प्रश्न/2139224/कैसे-टू-पास-ऑब्जेक्ट-टू-फ़ंक्शंस-इन-सी), जहां मैंने पहले से ही सामान्य प्रश्न का उत्तर दिया है। – sbi