#include <iostream>
#include <vector>
using namespace std;
class A {
public :
int num = 0 ;
A* parent = nullptr;
A( ) { cout << "A created: " << this << endl; }
A( const A & s) : num( s.num ) , parent( s.parent )
{
cout << "A copied: " << & s << " -> " << this << endl;
}
~A( ) { cout << "A destroyed: " << this << endl; }
vector< A> foo( A & a)
{
A a1;
a1.num = a.num ;
a1.parent = & a;
vector< A> list;
list.reserve ( 1 ) ;
list.push_back ( a1) ;
A & temp = list.front ( ) ;
cout << "(foo) temp.parent: " << temp.parent << ", num: " << temp.parent - > num << endl;
return list;
}
} ;
int main( )
{
A a;
a.num = 2 ;
vector< A> list = a.foo ( a) ;
A & temp = list.front ( ) ;
cout << "(main) temp.parent: " << temp.parent << ", num: " << temp.parent - > num << endl;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQSB7CnB1YmxpYzoKICAgIGludCBudW0gPSAwOwogICAgQSogcGFyZW50ID0gbnVsbHB0cjsKCiAgICBBKCl7IGNvdXQgPDwgIkEgY3JlYXRlZDogIiA8PCB0aGlzIDw8IGVuZGw7IH0KCiAgICBBKGNvbnN0IEEgJnMpIDogbnVtKHMubnVtKSwgcGFyZW50KHMucGFyZW50KQogICAgewogICAgCWNvdXQgPDwgIkEgY29waWVkOiAiIDw8ICZzIDw8ICIgLT4gIiA8PCB0aGlzIDw8IGVuZGw7CiAgICB9CgogICAgfkEoKXsgY291dCA8PCAiQSBkZXN0cm95ZWQ6ICIgPDwgdGhpcyA8PCBlbmRsOyB9CgogICAgdmVjdG9yPEE+IGZvbyhBICZhKQogICAgewogICAgICAgIEEgYTE7CiAgICAgICAgYTEubnVtID0gYS5udW07CiAgICAgICAgYTEucGFyZW50ID0gJmE7CiAgICAKICAgICAgICB2ZWN0b3I8QT4gbGlzdDsKICAgICAgICBsaXN0LnJlc2VydmUoMSk7CiAgICAgICAgbGlzdC5wdXNoX2JhY2soYTEpOwogICAgICAgIAogICAgICAgIEEgJnRlbXAgPSBsaXN0LmZyb250KCk7CiAgICAKICAgICAgICBjb3V0IDw8ICIoZm9vKSB0ZW1wLnBhcmVudDogIiA8PCB0ZW1wLnBhcmVudCA8PCAiLCBudW06ICIgPDwgdGVtcC5wYXJlbnQtPm51bSA8PCBlbmRsOwoKICAgICAgICByZXR1cm4gbGlzdDsKICAgIH0KfTsgCgppbnQgbWFpbigpCnsKICAgIEEgYTsgCiAgICBhLm51bSA9IDI7CgogICAgdmVjdG9yPEE+IGxpc3QgPSBhLmZvbyhhKTsKCiAgICBBICZ0ZW1wID0gbGlzdC5mcm9udCgpOwoKCWNvdXQgPDwgIihtYWluKSB0ZW1wLnBhcmVudDogIiA8PCB0ZW1wLnBhcmVudCA8PCAiLCBudW06ICIgPDwgdGVtcC5wYXJlbnQtPm51bSA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9