इस ऑब्जेक्ट पर रिटर्निंग संदर्भ अक्सर assignment operator overloading में उपयोग किया जाता है। इसे named parameters idiom के आधार के रूप में भी उपयोग किया जाता है जो कॉलर विधियों को कॉल की श्रृंखला द्वारा ऑब्जेक्ट प्रारंभ करने की अनुमति देता है: Params().SetX(1).SetY(1)
जिनमें से प्रत्येक * के संदर्भ में आता है।क्या यह संदर्भ के रूप में * इसे वापस सुरक्षित करना सुरक्षित है?
लेकिन *this
के संदर्भ में वापस लौटना सही है। क्या होगा यदि हम अस्थायी वस्तु के लिए इस संदर्भ को संदर्भित करने के लिए विधि को कॉल करते हैं:
#include <iostream>
class Obj
{
public:
Obj(int n): member(n) {}
Obj& Me() { return *this; }
int member;
};
Obj MakeObj(int n)
{
return Obj(n);
}
int main()
{
// Are the following constructions are correct:
std::cout << MakeObj(1).Me().member << std::endl;
std::cout << Obj(2).Me().member << std::endl;
Obj(3).Me() = Obj(4);
return 0;
}
उन दोनों उपयोग सुरक्षित हैं। समस्या तब उत्पन्न होगी जब कॉलिंग कोड वर्तमान कथन से अधिक लंबे समय तक संदर्भ रखने की कोशिश करता है, उदा। 'ऑटो और रेफरी = MakeObj (5) .Me();'। हां, आप एक ऐसे आभासी वस्तु को बना सकते हैं जो इस तरह एक अस्थायी वस्तु को निर्दिष्ट करता है (जो एक कारण है कि मैं अक्सर उन लोगों को सही करता हूं जो "अस्थायी वस्तु" और "रावल्यू" शब्दों का उपयोग करते हैं। –
मैंने देखा कि मानक पुस्तकालय भी इस * http - : //www.cplusplus.com/reference/vector/vector/operator=/: "वापसी मान: * यह"। मानक पुस्तकालय गलत निर्माण का उपयोग करता है तो यह अजीब होगा। :) –