#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;
}