#include <iostream>
#include <memory>
using std::shared_ptr;
using std::weak_ptr;
using std::make_shared;
class A : public std::enable_shared_from_this<A>
{
public:
class B{
public:
B(shared_ptr<A> ptr) { //??
ptrToA = ptr;
}
~B(){}
private:
int bNumber{1};
weak_ptr<A> ptrToA;
};
A(){
ptrToB = make_shared<B>(shared_from_this());
}
~A(){}
shared_ptr<B> getPtrToB() { return ptrToB; }
private:
shared_ptr<B> ptrToB;
int aNumber{0};
};
int main(){
A aInstance;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKdXNpbmcgc3RkOjpzaGFyZWRfcHRyOwp1c2luZyBzdGQ6OndlYWtfcHRyOwp1c2luZyBzdGQ6Om1ha2Vfc2hhcmVkOwoKY2xhc3MgQSA6IHB1YmxpYyBzdGQ6OmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzPEE+CnsKcHVibGljOgoKCWNsYXNzIEJ7CglwdWJsaWM6CgkJQihzaGFyZWRfcHRyPEE+IHB0cikgIHsgLy8/PwoJCQlwdHJUb0EgPSBwdHI7CgkJfSAKCQl+Qigpe30KCXByaXZhdGU6CgkJaW50IGJOdW1iZXJ7MX07CgkJd2Vha19wdHI8QT4gcHRyVG9BOwoJfTsKCQoJCglBKCl7CgkJcHRyVG9CID0gbWFrZV9zaGFyZWQ8Qj4oc2hhcmVkX2Zyb21fdGhpcygpKTsKCX0KCX5BKCl7fQoJc2hhcmVkX3B0cjxCPiBnZXRQdHJUb0IoKSB7IHJldHVybiBwdHJUb0I7IH0KCQoJCgpwcml2YXRlOgoJc2hhcmVkX3B0cjxCPiBwdHJUb0I7CglpbnQgYU51bWJlcnswfTsKfTsKCmludCBtYWluKCl7CglBIGFJbnN0YW5jZTsKCQoJcmV0dXJuIDA7Cn0=