Verständnis "const" pointer
-
Dieser Beitrag wurde gelöscht!
-
@spiri Ich geb's auf. Tu was du willst.
-
@spiri sagte in Verständnis "const" pointer:
Doch als Rückgabetyp. Dann hast du einen konstanten Pointer den du nicht mehr umbiegen kannst. Und brauchst nicht mehr mit dem Dereferenzierungsoperator zu hantieren.
Hmm sehe ich anders. Klar gönne ich mir auch gern den Luxus einer (const-)Referenz, aber gerade bei einer Factory-Funktion wird eigentlich suggeriert, dass man das Objekt selber in die Hand bekommt, weil man es dort gewissermaßen "produziert".
Ich vermute, du willst auf folgendes hinaus: du hast irgendwo eine Art "ObjectRegistry" und dort wird das Objekt noch innerhalb der Factory-Funktion registriert.
Aber selbst in dem Fall sehe ich da noch keine Referenz sondern eher einen shared_ptr. Ohne Registrierung dann den unique_ptr. Weil es eben trotzdem eine Factory ist und die sollte doch bitte das Objekt "zur freien Verfügung" zurückliefern. Die Smartpointer haben den Charme, dass sie den sauberen Umgang mit der "Lebenszeit" des Objekts garantieren.PS: Sportfreunde, es gibt keinen Grund einander anzupöbeln, nur weil man unterschiedliche Ansichten vertritt.
-
@It0101 sagte in Verständnis "const" pointer:
Hmm sehe ich anders. Klar gönne ich mir auch gern den Luxus einer (const-)Referenz, aber gerade bei einer Factory-Funktion wird eigentlich suggeriert, dass man das Objekt selber in die Hand bekommt, weil man es dort gewissermaßen "produziert".
Ja, und? Was hindert dich daran das Ding trotzdem als Referenz zurückzugeben?
-
@spiri sagte in Verständnis "const" pointer:
@It0101 sagte in Verständnis "const" pointer:
Hmm sehe ich anders. Klar gönne ich mir auch gern den Luxus einer (const-)Referenz, aber gerade bei einer Factory-Funktion wird eigentlich suggeriert, dass man das Objekt selber in die Hand bekommt, weil man es dort gewissermaßen "produziert".
Ja, und? Was hindert dich daran das Ding trotzdem als Referenz zurückzugeben?
Wenn ich eine Referenz zurück bekomme, bedeutet das, dass ich eigentlich gar nicht (alleiniger) Owner von dem Teil bin. Und bei einer Factory würde mich das nerven.
-
@spiri sagte in Verständnis "const" pointer:
Ja, und? Was hindert dich daran das Ding trotzdem als Referenz zurückzugeben?
Referenz worauf denn überhaupt? Reden wir/ihr noch von einer FactoryFunction?
-
Sowas:
int& createInt() { return *(new int(42)); } int main() { int &i = createInt(); // benutze i delete &i; }
Eben furchtbar. Aber bitte, möglich ist das natürlich. Würde ich außer @spiri niemandem empfehlen.
-
@wob
Ich glaube, spiri meinte eher sowas, weil OP den Wert iwo wegspeichert.#include <vector> int& create_int() { static vector<int> data; data.push_back( 5 ); return data.back(); } int main() { int& i = create_int(); }
Wirft halt andere Probleme auf...
-
@It0101 sagte in Verständnis "const" pointer:
Wenn ich eine Referenz zurück bekomme, bedeutet das, dass ich eigentlich gar nicht (alleiniger) Owner von dem Teil bin. Und bei einer Factory würde mich das nerven.
Nochmal: Und inwiefern hilft dir das wenn du einen konstanten Pointer zurückgibst?
@Jockelx sagte in Verständnis "const" pointer:
Referenz worauf denn überhaupt?
Nicht worauf. Sondern statt einem konstanten Pointer.
-
@spiri
Ich glaube, der Konsens ist ein smart Pointer.
-
Aber statt rohen konstanten Zeiger nehm ich lieber gleich eine Referenz
-
@DocShoe sagte in Verständnis "const" pointer:
@wob
Ich glaube, spiri meinte eher sowas, weil OP den Wert iwo wegspeichert.#include <vector> int& create_int() { static vector<int> data; data.push_back( 5 ); return data.back(); } int main() { int& i = create_int(); }
Wirft halt andere Probleme auf...
Besser wäre wohl noch der korrekte Container gewesen
-
@spiri
Aber das sind doch zwei völlig unterschiedliche Dinge:
@wob's Beispiel ist für mich eine Factory-function und die ist so mit der Referenz schlicht gruselig.
@DocShoe's ist doch eher ein getter -auch gruselig- aber ein getter ändert keinen Besitz und da ist eine (const-)Referenz auch prima.
-
Das erste Beispiel ist einfach nur falsch. Das zweite schlecht.
Aber auch für eine Factory würde ich vmtl. mit Referenzen hantieren. Oder eben einem Owner-Objekt.
Aber ganz bestimmt nicht mit einem konstanten Pointer.
-
@spiri
Dann zeig doch mal Code für den Fall, den du dir vorstellt. Ich fürchte, hier wird aneinander vorbeigeredet.
-
Das zweite schlecht weil hier vector verwendet wird und die älteren Verweise nach jedem push_back() kaputt macht.
-
@spiri
Das war nicht die Frage, bzw. willst du jetzt vector durch list ersetzen und dann wäre das Beispiel von DocShoe okay für dich?
-
@Jockelx sagte in Verständnis "const" pointer:
@spiri
Das war nicht die Frage, bzw. willst du jetzt vector durch list ersetzen und dann wäre das Beispiel von DocShoe okay für dich?
Ja
-
z.T. spiri kann ich nur sagen: Die Funktion zum Blocken von Benutzern ist für mich der grösste Mehrwert der neuen Forumssoftware. Denn wenn ich den Rotz den manche Trolle (absichtliche oder unabsichtliche) hier so ablassen lesen muss, dann kann ich nicht anders als mich zu ärgern. So blocke ich jetzt die diversen Kandidaten einfach und hab meine Ruhe. (Und nein, ich hab hier nicht zig User geblockt, im Moment sind es genau zwei.)
-
@spiri sagte in Verständnis "const" pointer:
@Jockelx sagte in Verständnis "const" pointer:
Referenz worauf denn überhaupt?
Nicht worauf. Sondern statt einem konstanten Pointer.
?? Bei einer Referenz stellt sich immer die Frage des "worauf". Wenn wir von Referenzen reden, dann reden wir immer davon, dass das Objekt irgendwo "wohnt" und wir uns eine Referenz auf dieses Objekt beschaffen.
Mit T* ( oder artverwandten Dingen ) muss dieser Wohnort nicht existieren, weil wir mit der Übernahme des Zeigers auf das Objekt aus der Factory-Funktion auch das Ownership übernehmen. Im Gegensatz zur Referenz.