Wenn ich irgendetwas Programmübergreifendes schreibe, dann sehe ich prinzipiell zu, möglichst intuitiven Code zu erzeugen (zumindest nach außen hin)
Warum nicht immer intuitiv schreiben und auf der sicheren Seite bleiben?
und das ganz ohne Referenzen (die Anfänger oft noch mehr verwirren als Zeiger, wie ich festgestellt habe) und aufgeblähten Funktionsaufruf
Es ist zwar richtig, das Referenzen nicht unbedingt sofort verstanden werden, aber das gilt genauso für Zeiger und Arrays. Ich denke nicht, dass Referenzen da besonders problematisch sind. Und gerade wenn man etwas zeitgemässeren Code schreibt, kommt man um Referenzen ohnehin nicht herum, wobei ich mit zeitgemäss einfach nur meine, dass man C++ schreibt anstelle von "C mit Schuss". Zeiger haben ihre Rechtfertigung immer noch, aber man kann und sollte lernen, sie bewusst einzusetzen und auf sie zu verzichten, wenn es eleganter geht.
Und bei diesem Beispiel halte ich es für sinnvoll einen Zeiger von der Funktion zurückzubekommen und ihn wieder mit delete [ ] freizugeben (wo die Initialisierung nur ein paar Zeilen höher steht)
Noch steht er in unmittelbarer Nähe, aber es ist wahrscheinlich, dass er das nicht immer tun wird.
Die Rückgabe von innerhalb Funktionen allozierten Objekten, kombiniert mit Übertragung der Verantwortung auf den User, ist eine gefährliche, schlechte Angewohnheit, und gerade einem Neuling, der es nicht besser weiss, sollte man sowas nicht vormachen. Das Argument, dass es nur für einen selbst ist, lasse ich so nicht gelten, da ich weiss, wie man nach einigen Wochen dem eigenen Code gegenübersteht... dann ist man sein eigener User und dankbar für jedes bischen Dokumentation, zum Beispiel in Form von benannten Parameternamen, der einem das Rätselraten erspart: "Hm, welcher Arrayindex war denn jetzt nochmal der mit dem Resultat der Multiplikation, und muss ich das Ding jetzt freigeben?" Wenn schon, dann wäre eventuell ein Enum dafür zu definieren.