Является ли это правильным способом инициализации членов путем вызова конструктора Point, подобного этому Point A = Point () (с точки зрения эффективности и чистого кода)?
Это правильно.
Вы не можете говорить об эффективности только одним методом. Вам нужно представить второй метод, а затем сравнить его по эффективности.
Что касается чистоты, я думаю, что лучше использовать имена аргументов функций, которые отличаются от переменных-членов.
Компилятор создаст правильный код при использовании
Triangle(Point A=Point(), Point B=Point(), Point C=Point()): A(A), B(B), C(C) {}
но его удобнее читать
Triangle(Point inA = Point(), Point inB = Point(), Point inC = Point()): A(inA), B(inB), C(inC) {}