#include <iostream>
class A {
};
struct S {
A* a;
S(A* c) { a = c; }
};
class B {
public:
B(S* s){ s_ = s; }
S* get_s() {return s_;}
private:
S* s_;
};
int main() {
A* a = new A();
S* s = new S(a);
B b = B(s);
std::cout << "a in A = " << a << "\n";
std::cout << "a in S = " << s->a << "\n";
std::cout << "a in B = " << b.get_s()->a << "\n";
//output:
// a in A = 0x7ffe81376918
// a in S = 0x2563e90
// a in B = 0x2563e90
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQSB7Cn07CgpzdHJ1Y3QgUyB7CiAgQSogYTsKICBTKEEqIGMpIHsgYSA9IGM7IH0KfTsKCmNsYXNzIEIgewogIHB1YmxpYzoKICAgIEIoUyogcyl7IHNfID0gczsgfQogICAgUyogZ2V0X3MoKSB7cmV0dXJuIHNfO30KICBwcml2YXRlOgogICAgUyogc187Cn07CgppbnQgbWFpbigpIHsKICBBKiBhID0gbmV3IEEoKTsKICBTKiBzID0gbmV3IFMoYSk7CiAgQiBiID0gIEIocyk7CgogIHN0ZDo6Y291dCA8PCAiYSBpbiBBID0gIiA8PCBhIDw8ICJcbiI7CiAgc3RkOjpjb3V0IDw8ICJhIGluIFMgPSAiIDw8IHMtPmEgPDwgIlxuIjsgCiAgc3RkOjpjb3V0IDw8ICJhIGluIEIgPSAiIDw8IGIuZ2V0X3MoKS0+YSA8PCAiXG4iOwoKICAvL291dHB1dDoKICAvLyBhIGluIEEgPSAweDdmZmU4MTM3NjkxOAogIC8vIGEgaW4gUyA9IDB4MjU2M2U5MAogIC8vIGEgaW4gQiA9IDB4MjU2M2U5MAp9