संदर्भ द्वारा स्मार्ट पॉइंटर्स पास करने के बारे में कई प्रश्न हैं। मुझे जो नहीं मिला वह एक निश्चित उत्तर है: क्या हम संदर्भ द्वारा स्मार्ट पॉइंटर को स्वीकार करने वाली विधि के लिए एक नलप्टर पास कर सकते हैं?

उदाहरण:

void myFunc(std::shared_ptr<std::string> &myStrRef) {
   // do something
}

void main() {
   myFunc(nullptr);
}
1
benjist 16 मार्च 2020, 18:42

1 उत्तर

सबसे बढ़िया उत्तर

क्या हम संदर्भ द्वारा स्मार्ट पॉइंटर को स्वीकार करने वाली विधि के लिए एक नलप्टर पास कर सकते हैं?

नॉन-कास्ट लैवल्यू रेफरेंस के साथ नहीं।

void myFunc(std::shared_ptr<std::string> &myStrRef) {
   // do something
}

void main() {
   myFunc(nullptr);
}

संकलित करने में विफल रहेगा क्योंकि myStrRef एक अस्थायी वस्तु के लिए बाध्य नहीं हो सकता। यदि आपके पास इसके बजाय था

void myFunc(const std::shared_ptr<std::string> &myStrRef) {
   // do something
}
// or
void myFunc(std::shared_ptr<std::string> &&myStrRef) {
   // do something
}

तब यह कानूनी होगा क्योंकि वे संदर्भ अस्थायी वस्तु से जुड़ सकते हैं।

7
NathanOliver 16 मार्च 2020, 19:23