मैं सिर्फ स्मार्ट पॉइंटर्स को समझने और मेरा बनाने की कोशिश करने के लिए चारों ओर खेल रहा हूं लेकिन मैं ऐसी स्थिति में आया हूं जिसे मैं पूरी तरह समझ नहीं पा रहा हूं। यहाँ कोड है:असाइनमेंट ऑपरेटर कॉल कन्स्ट्रक्टर क्यों करता है?
#include <iostream>
template <class T>
class Holder
{
private:
T * obj;
public:
Holder(T * tt) : obj(tt)
{
std::cout << "ctor : " << tt->dummy << std::endl;
}
T * operator ->()
{
return obj;
}
operator bool()
{
return obj;
}
T * const get() const
{
return obj;
}
void reset() {swap(0);}
void swap(T * other)
{
obj = other;
}
Holder & operator = (const Holder& holder)
{
obj = holder.get();
return *this;
}
Holder(const Holder & holder) : obj(holder.get()) {}
};
class A
{
public:
int dummy;
A(int a) : dummy(a) {}
};
int main()
{
A * a = new A(1);
Holder<A> holder(a);
A * b = new A(2);
holder = b;
std::cout << holder->dummy << std::endl;
return 0;
}
कोड संकलित करता है तथा holder = b;
की लाइन पर Holder
वर्ग के निर्माता कहा जाता है। मैंने सोचा कि संकलक एक त्रुटि देगा। यह आकलन ऑपरेटर नहीं है लेकिन यह कन्स्ट्रक्टर क्यों कह रहा है?
'Holder', दो कंस्ट्रक्टर्स है जो एक कहा जाता है? – suszterpatt
@suszterpatt: धारक (टी * टीटी) –