@Johnny01
Die meisten Programme lassen sich grob in 4 Richtungen unterscheiden:
1.) Schulprogramme
Schulprogramme sind Programme, welche an der Schule gelehrt werden und welche fast immer hoffnungslos veraltet sind. Da werden Pointer, verkettete Listen,... benutzt.
Möchte man hier helfen, so muss man erst einmal schauen was der Lehrer haben möchte und eine entsprechende Lösung zeigen. Egal wie veraltet, fehleranfällig die Lösung sein mag.
2.) Uniprogramme
Uniprogramme sind relativ ähnlich zu Schulprogrammen. Jedoch hat man mehr Freiheiten beim programmiern, hauptsache das Ergebnis stimmt.
Und an meiner Uni wurde immer gesagt, man lehre keine Programmierung, das darf man schön selbst machen. Also bekam man öfters eine sehr kurze Einführung in Java, C,... und durfte dann direkt ein Problem nachprogrammieren.
3.) Programmiersprache als MIttel zum Zweck
Beispiel: "Hmm, der angebotene Kredit hat einen Zinssatz von 2% und eine Laufzeit von 8 Jahren. Der zweite angebotene Kredit hat einen Zinssatz von 4% und eine Laufzeit von 4 Jahren. Welcher Kredit ist günstiger?"
In diesem Beispiel schnappt man sich eine Programmiersprache, rotzt den Programmcode herunter und schaut sich das Ergebnis an.
Hierunter könnte dein Programm fallen. Du möchtest Koperkonstruktor verstehen, also schreibst du ein Programm und schaust dir das Verhalten an.
4.) Produktiver/professionieller EInsatz
Im produktiven Einsatz versucht man Programme zu schreiben, welche möglichst wenig fehleranfällig, robust gegenüber Fehler (Eingabefehler), schnell, einfach, sauber, lesbar, dokumentiert, leicht erweiterbar, einfach zu bedienen,... ist.
Und genau das ist der Unterschied zu den 3 vorherigen Richtungen. Auf einmal spielen Dinge wie fehleranfälligkeit eine Rolle.
Betrachtet man dein Programm nun aus Sicht des produktiven Einsatzes, so stellt man sich halt die Frage warum du Pointer und Allokationen (new) nutzt. Beide Sachen erweisen sich nämlich als fehleranfällig.
Wer gibt beispielsweise den allokierten Speicher in int* coordinates; frei?
Warum erzwingt man hier ein new(), wenn man die Koordinaten doch direkt definieren kann ("int coordinates[2];")? Das macht das Programm doch unnötig langsamer.
Deine Funktion make_pair hat eine gewisse Ähnlichkeit zu std::make_pair. Deine Funktion kann aber im Gegensatz zu der std::make_pair Variante ein Speicherloch erzeugen. Nicht gut.
usw.