कॉपी कन्स्ट्रक्टर और सी ++ में कॉपी असाइनमेंट ऑपरेटरों के बारे में पढ़ने के बाद, मैंने एक साधारण उदाहरण बनाने की कोशिश की। हालांकि नीचे स्निपेट स्पष्ट रूप से काम करता है, मुझे यकीन नहीं है कि मैं कॉपी कन्स्ट्रक्टर को कार्यान्वित कर रहा हूं और असाइनमेंट ऑपरेटर को सही तरीके से कॉपी कर रहा हूं। क्या आप कृपया बता सकते हैं कि क्या कोई गलती/सुधार या प्रासंगिक अवधारणाओं को समझने के लिए एक बेहतर उदाहरण है।सी ++: कॉपी कन्स्ट्रक्टर और कॉपी असाइनमेंट ऑपरेटर को कार्यान्वित करना
class Foobase
{
int bInt;
public:
Foobase() {}
Foobase(int b) { bInt = b;}
int GetValue() { return bInt;}
int SetValue(const int& val) { bInt = val; }
};
class Foobar
{
int var;
Foobase *base;
public:
Foobar(){}
Foobar(int v)
{
var = v;
base = new Foobase(v * -1);
}
//Copy constructor
Foobar(const Foobar& foo)
{
var = foo.var;
base = new Foobase(foo.GetBaseValue());
}
//Copy assignemnt operator
Foobar& operator= (const Foobar& other)
{
if (this != &other) // prevent self-assignment
{
var = other.var;
base = new Foobase(other.GetBaseValue());
}
return *this;
}
~Foobar()
{
delete base;
}
void SetValue(int val)
{
var = val;
}
void SetBaseValue(const int& val)
{
base->SetValue(val);
}
int GetBaseValue() const
{
return(base->GetValue());
}
void Print()
{
cout<<"Foobar Value: "<<var<<endl;
cout<<"Foobase Value: "<<base->GetValue()<<endl;
}
};
int main()
{
Foobar f(10);
Foobar g(f); //calls copy constructor
Foobar h = f; //calls copy constructor
Foobar i;
i = f;
f.SetBaseValue(12);
f.SetValue(2);
Foobar j = f = z; //copy constructor for j but assignment operator for f
z.SetBaseValue(777);
z.SetValue(77);
return 1;
}
+1 अच्छा बिंदु कॉपी और स्वैप मुहावरे एक अपवाद सुरक्षित कार्यान्वयन के लिए आवश्यक है जो ऑब्जेक्ट को एक स्थिर स्थिति में रहने की गारंटी देता है। – jdehaan
क्या विनाशक '~ Foobar() 'द्वारा स्मृति को मुक्त नहीं किया जाएगा? – blitzkriegz
@ महात्मा: '~ Foobar()' नहीं कहा जाएगा; वस्तु कभी नष्ट नहीं होती है, इसे सौंपा जाता है। –