संभव डुप्लिकेट:
Overloading operator ->ऑपरेटर-> पॉइंटर्स के लिए "जंजीर" है?
हाय,
मैंने देखा है कि operator->()
श्रृंखलित है (फिर से लागू) के बाद यह मूल्यांकन किया जाता है, उदाहरण के लिए:
struct Bar
{
Bar() : m_str("Hello world!") {}
const string* operator->() const { return &m_str; }
string m_str;
};
struct Foo
{
const Bar& operator->() const { return m_bar; }
Bar m_bar;
};
int main()
{
Foo f;
cout << f->c_str() << endl;
return 0;
}
बहुत बढ़िया काम करता है, जिसके लिए आवश्यक है मूल्यांकन के लिए तीन operator->()
- Foo::operator->()
, Bar::operator->()
और नियमित सूचक संकल्प।
लेकिन यह मध्य में पॉइंटर्स के साथ काम नहीं करेगा - अगर Foo::operator->()
संदर्भ के बजाय बार में पॉइंटर लौटाता है, तो यह संकलित नहीं होगा। उदाहरण के लिए auto_ptr<auto_ptr<string>>
के साथ ही होता है।
क्या यह गैर-अधिभारित operator->()
के लिए विशिष्ट है, इसलिए यह केवल एक बार लागू होता है और चेनिंग का कारण नहीं बनता है? (*ptr2)-> ...
का उपयोग किए बिना नीचे दिए गए कोड को बनाना संभव है?
int main()
{
string s = "Hello world";
auto_ptr<string> ptr1(&s);
auto_ptr<auto_ptr<string> > ptr2(&ptr1);
cout << ptr1->c_str() << endl; // fine
cout << ptr2->c_str() << endl; // breaks compilation
}
धन्यवाद!
[ओवरलोडिंग ऑपरेटर ->] (http://stackoverflow.com/questions/4896238/overloading-operator) का डुप्लिकेट [एंड्रीटी का जवाब 'ऑपरेटर->' के व्यवहार और "चेनिंग" कैसे होता है।] –
@ जेम्स मैं इस खुले रखने के पक्ष में सवाल उठाने के पक्ष में अलग हूं। यह अन्य लोगों को उस उत्तर को खोजने में मदद कर सकता है। –
@ जुज: एक बंद प्रश्न स्वचालित रूप से हटाया नहीं जाता है, और इस तरह एक अच्छी तरह से पूछे जाने वाले प्रश्न को हटाया नहीं जाएगा; सवाल अभी भी मौजूद होगा और खोजने योग्य होगा। –