#include <iostream>
using namespace std;
struct a {
a(int) {
cout << "+a" << endl;
}
~a() {
cout << "~a" << endl;
}
};
struct b {
b(const a& a) {
cout << "+b(a)" << endl;
}
b(const b& a) {
cout << "+b(b)" << endl;
}
~b() {
cout << "~b" << endl;
}
b& operator=(const b& bb) {
cout << "=b" << endl;
}
};
int main() {
b b1(a(1));
cout << "----" << endl;
b b2= b(a(1));
printf("%p %p\n", (void*)&b1, (void*)&b2);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGEgewoJYShpbnQpIHsKCQljb3V0IDw8ICIrYSIgPDwgZW5kbDsKCX0KCX5hKCkgewoJCWNvdXQgPDwgIn5hIiA8PCBlbmRsOwoJfQp9OwoKc3RydWN0IGIgewoJYihjb25zdCBhJiBhKSB7CgkJY291dCA8PCAiK2IoYSkiIDw8IGVuZGw7Cgl9CgliKGNvbnN0IGImIGEpIHsKCQljb3V0IDw8ICIrYihiKSIgPDwgZW5kbDsKCX0KCX5iKCkgewoJCWNvdXQgPDwgIn5iIiA8PCBlbmRsOwoJfQoJYiYgb3BlcmF0b3I9KGNvbnN0IGImIGJiKSB7CgkJY291dCA8PCAiPWIiIDw8IGVuZGw7Cgl9Cn07CgppbnQgbWFpbigpIHsKCWIgYjEoYSgxKSk7Cgljb3V0IDw8ICItLS0tIiA8PCBlbmRsOwoJYiBiMj0gYihhKDEpKTsKCXByaW50ZigiJXAgJXBcbiIsICh2b2lkKikmYjEsICh2b2lkKikmYjIpOwoJcmV0dXJuIDA7Cn0=