#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(){}
B(shared_ptr<A> ptr) { //??
std::cout << "B()\n";
ptrToA = ptr;
}
~B(){}
private:
int bNumber{1};
weak_ptr<A> ptrToA;
};
A(){ std::cout << "A() \n"; }
~A(){}
shared_ptr<B> getPtrToB() { return ptrToB; }
void init(){ //Передвинул из конструктора сюда
ptrToB = make_shared<B>(shared_from_this());
}
private:
shared_ptr<B> ptrToB;
int aNumber{0};
};
int main(){
A aInstance;
std::cout << "A created \n";
aInstance.init();
std::cout << "Init Finished \n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKdXNpbmcgc3RkOjpzaGFyZWRfcHRyOwp1c2luZyBzdGQ6OndlYWtfcHRyOwp1c2luZyBzdGQ6Om1ha2Vfc2hhcmVkOwoKY2xhc3MgQSA6IHB1YmxpYyBzdGQ6OmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzPEE+CnsKcHVibGljOgoKCWNsYXNzIEJ7CglwdWJsaWM6CgkJQigpe30KCQlCKHNoYXJlZF9wdHI8QT4gcHRyKSAgeyAvLz8/CgkJICAgIHN0ZDo6Y291dCA8PCAiQigpXG4iOwoJCQlwdHJUb0EgPSBwdHI7CgkJfSAKCQl+Qigpe30KCXByaXZhdGU6CgkJaW50IGJOdW1iZXJ7MX07CgkJd2Vha19wdHI8QT4gcHRyVG9BOwoJfTsKCQoJCglBKCl7IHN0ZDo6Y291dCA8PCAiQSgpIFxuIjsgfQkKCX5BKCl7fQoJc2hhcmVkX3B0cjxCPiBnZXRQdHJUb0IoKSB7IHJldHVybiBwdHJUb0I7IH0KCQoJdm9pZCBpbml0KCl7CS8v0J/QtdGA0LXQtNCy0LjQvdGD0Lsg0LjQtyDQutC+0L3RgdGC0YDRg9C60YLQvtGA0LAg0YHRjtC00LAKCQlwdHJUb0IgPSBtYWtlX3NoYXJlZDxCPihzaGFyZWRfZnJvbV90aGlzKCkpOwoJfQoKcHJpdmF0ZToKCXNoYXJlZF9wdHI8Qj4gcHRyVG9COwoJaW50IGFOdW1iZXJ7MH07Cn07CgppbnQgbWFpbigpewoJQSBhSW5zdGFuY2U7CglzdGQ6OmNvdXQgPDwgIkEgY3JlYXRlZCBcbiI7CglhSW5zdGFuY2UuaW5pdCgpOwoJc3RkOjpjb3V0IDw8ICJJbml0IEZpbmlzaGVkIFxuIjsKCXJldHVybiAwOwp9