#include <iostream>
using namespace std;
int count = 0;
class Sample {
int *p;
int q;
int m_count;
public:
Sample() {
m_count = count;
cout<<"Constructor called for m_count = "<< count++ << endl;
p = new int;
q = 0;
}
Sample& operator =(const Sample &rhs) {
cout<<"Assignment Operator (m_count " << m_count << " = m_count " << rhs.m_count << ") " <<endl;
if(this != &rhs)
{
delete p; // Unnecessary
p = new int; // Unnecessary
*p = *(rhs.p);
}
return *this;
}
};
int main() {
Sample a;
Sample b;
Sample c;
a = (b = c); // (b = c) will return a Sample&
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGNvdW50ID0gMDsKCmNsYXNzIFNhbXBsZSB7CiAgICBpbnQgKnA7CiAgICBpbnQgcTsKICAgIGludCBtX2NvdW50OwoKcHVibGljOgogICAgU2FtcGxlKCkgewogICAgICAgIG1fY291bnQgPSBjb3VudDsKICAgICAgICBjb3V0PDwiQ29uc3RydWN0b3IgY2FsbGVkIGZvciBtX2NvdW50ID0gIjw8IGNvdW50KysgPDwgZW5kbDsKCiAgICAgICAgcCA9IG5ldyBpbnQ7CiAgICAgICAgcSA9IDA7CiAgICB9CgogICAgU2FtcGxlJiBvcGVyYXRvciA9KGNvbnN0IFNhbXBsZSAmcmhzKSB7CiAgICAgICAgY291dDw8IkFzc2lnbm1lbnQgT3BlcmF0b3IgKG1fY291bnQgIiA8PCBtX2NvdW50IDw8ICIgPSBtX2NvdW50ICIgPDwgcmhzLm1fY291bnQgPDwgIikgIiA8PGVuZGw7CiAgICAgICAgaWYodGhpcyAhPSAmcmhzKQogICAgICAgIHsKICAgICAgICAgICAgZGVsZXRlIHA7IC8vIFVubmVjZXNzYXJ5CiAgICAgICAgICAgIHAgPSBuZXcgaW50OyAvLyBVbm5lY2Vzc2FyeQogICAgICAgICAgICAqcCA9ICoocmhzLnApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICBTYW1wbGUgYTsKICBTYW1wbGUgYjsKICBTYW1wbGUgYzsKCiAgYSA9IChiID0gYyk7IC8vIChiID0gYykgd2lsbCByZXR1cm4gYSBTYW1wbGUmCn0=