Dlaczego tak
Operator new przydziela pamięć na stercie, wywołuje konstruktor i zwraca wskaźnik, który trzeba zapisać w zmiennej typu Punkt*; obiekt usuwa się potem operatorem delete. Zapis Punkt p = new Punkt(1, 2); pochodzi z Javy lub C# i w C++ jest błędem, bo wskaźnika nie da się przypisać do obiektu. Punkt p(1, 2); tworzy obiekt automatyczny na stosie, a Punkt(1, 2) bez new to obiekt tymczasowy, a nie adres.