#include <iostream>
#include <cstring>
using namespace std;
class String
{
char *buffer;
public:
String()
{
cout << "Constructor 1 "<<this<<endl;
buffer = new char[1];
buffer[0] = '\0';
}
String(const char *str)
{
cout << "Constructor 2 "<<this<<endl;
buffer = new char[strlen(str)+1];
strcpy(buffer,str);
}
String(const String &s)
{
cout << "Constructor copy "<<this<<" "<<&s<<endl;
buffer = new char[strlen(s.buffer)+1];
strcpy(buffer,s.buffer);
}
const char * get() const {return buffer;}
~String()
{
cout << "destructor "<<this<<endl;
delete [] buffer;
buffer = NULL;
}
String & operator = (const String &s)
{
cout << "operator = "<<this<<" "<<&s<<endl;
if (this == &s) return *this;
delete [] buffer;
buffer = new char[strlen(s.buffer)+1];
strcpy(buffer,s.buffer);
return *this;
}
};
String func()
{
String s1 = "AAAAAAAAAAAAAAA";
return s1;
}
int main()
{
String s1;
s1 = func();
cout<<s1.get()<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFN0cmluZwp7CgljaGFyICpidWZmZXI7CglwdWJsaWM6CglTdHJpbmcoKSAKCXsKCQljb3V0IDw8ICJDb25zdHJ1Y3RvciAxICI8PHRoaXM8PGVuZGw7CgkJYnVmZmVyID0gbmV3IGNoYXJbMV07IAoJCWJ1ZmZlclswXSA9ICdcMCc7Cgl9CglTdHJpbmcoY29uc3QgY2hhciAqc3RyKSAKCXsKCQljb3V0IDw8ICJDb25zdHJ1Y3RvciAyICI8PHRoaXM8PGVuZGw7CgkJYnVmZmVyID0gbmV3IGNoYXJbc3RybGVuKHN0cikrMV07IAoJCXN0cmNweShidWZmZXIsc3RyKTsKCX0KCVN0cmluZyhjb25zdCBTdHJpbmcgJnMpIAoJewoJCWNvdXQgPDwgIkNvbnN0cnVjdG9yIGNvcHkgIjw8dGhpczw8IiAiPDwmczw8ZW5kbDsKCQlidWZmZXIgPSBuZXcgY2hhcltzdHJsZW4ocy5idWZmZXIpKzFdOyAKCQlzdHJjcHkoYnVmZmVyLHMuYnVmZmVyKTsKCX0KCWNvbnN0IGNoYXIgKiBnZXQoKSBjb25zdCB7cmV0dXJuIGJ1ZmZlcjt9Cgl+U3RyaW5nKCkgCgl7CgkJY291dCA8PCAiZGVzdHJ1Y3RvciAiPDx0aGlzPDxlbmRsOwoJCWRlbGV0ZSBbXSBidWZmZXI7IAoJCWJ1ZmZlciA9IE5VTEw7Cgl9IAoJCVN0cmluZyAmIG9wZXJhdG9yID0gKGNvbnN0IFN0cmluZyAmcykgCgl7CgkJY291dCA8PCAib3BlcmF0b3IgPSAiPDx0aGlzPDwiICI8PCZzPDxlbmRsOwoJCWlmICh0aGlzID09ICZzKSByZXR1cm4gKnRoaXM7CgkJZGVsZXRlIFtdIGJ1ZmZlcjsKCQlidWZmZXIgPSBuZXcgY2hhcltzdHJsZW4ocy5idWZmZXIpKzFdOyAKCQlzdHJjcHkoYnVmZmVyLHMuYnVmZmVyKTsKCQlyZXR1cm4gKnRoaXM7Cgl9CgkKfTsKClN0cmluZyBmdW5jKCkKewoJU3RyaW5nIHMxID0gIkFBQUFBQUFBQUFBQUFBQSI7CglyZXR1cm4gczE7Cn0KCmludCBtYWluKCkgCnsKCVN0cmluZyBzMTsKCQoJIHMxID0gZnVuYygpOwoJCgkKCWNvdXQ8PHMxLmdldCgpPDxlbmRsOwoJCglyZXR1cm4gMDsKfQ==