В чем разница между этими двумя вариантами? Кажется, они ведут себя точно так же.
class A{ public: A():b(nullptr) { b = this; // variant 1 b.a = this; // variant 2 } class B { public: B(A* a): a(a){} private: friend class A; A* a; }; B b; };
В первом варианте используется неявный конструктор, что означает, что b перестраивается с использованием указателя this. Второй вариант просто изменяет значение b.a. Обратите внимание, что в этой простой реализации нет разницы.
this
b.a