shared_ptr für Argumente Sinnvoll?
-
Arcoth schrieb:
Dafür gibt es drei Möglichkeiten: Zeiger, Referenzen, oder einen Wrapper um eines von Beiden.
Wrapper um Referenzen lieber nicht.
-
liebernicht schrieb:
Arcoth schrieb:
Dafür gibt es drei Möglichkeiten: Zeiger, Referenzen, oder einen Wrapper um eines von Beiden.
Wrapper um Referenzen lieber nicht.
Also ich finde
reference_wrapperschon sinnvoll. (nicht als Funktionsparameter, i.A.)
-
Arcoth schrieb:
liebernicht schrieb:
Arcoth schrieb:
Dafür gibt es drei Möglichkeiten: Zeiger, Referenzen, oder einen Wrapper um eines von Beiden.
Wrapper um Referenzen lieber nicht.
Also ich finde
reference_wrapperschon sinnvoll. (nicht als Funktionsparameter, i.A.)reference_wrapper ist aber ein misnomer. Es ist unmöglich, reference_wrapper mit einer Referenz zu implementieren. (In Wirklichkeit ist es ein pointer_wrapper)
-
Ein pointer_wrapper könnte aber den null-Pointer enthalten. Der reference_wrapper bringt dieselben Garantien mit sich, die eben auch eine Referenz bringt. Naja, vielleicht gibt es irgendwelchen abstrusen Fälle, wo das kopieren der Referenz die Lebenszeit verlängern würde, aber der reference_wrapper sich anders verhält oder andersherum oder wie auch immmer... aber ansonsten...
-
Es ist unmöglich, reference_wrapper mit einer Referenz zu implementieren.
Implementationsdetails sind für die Semantik irrelevant.
-
Arcoth schrieb:
Es ist unmöglich, reference_wrapper mit einer Referenz zu implementieren.
Implementationsdetails sind für die Semantik irrelevant.
Dann sind wir uns ja einig, dass es nicht sinnvoll ist, eine Referenz zu wrappen.
-
Der Sinn und Zweck von reference_wrapper ist es ja eigentlich doch auch nicht direkt eine Referenz zu wrappen, sondern Information bezüglich der Behandlungsweise an Funktionstemplates weiterzureichen, oder etwa nicht? Also Qualifizierer reinzu"pushen", anstatt implizit und nicht steuerbar "ziehen" zu lassen. Oder habe ich da etwas falsch verstanden?
-
Ja zunächst mal würde ich ja auch Referenzen für Argumente nehmen,
aber oft läuft dann später der Namensraum des Prameters ab, sodass ich später nicht mehr mit dem Übergebenen Parameter arbeiten kann.
Meine Idee war eigentlich als Parameter dann einfach einen unique_ptr zu nehmen, sodass ich den Gültigkeitsbereich verschieben kann.Und noch eine Frage, wenn ich eine Constante Referenz übergebe, ist doch nur sozusagen die Speicheradresse constant, sodass man immer noch sämtliche Funktionen der Parameters ausführen kann(Also mann kann der Referenz keinen neuen Referendar zuweisen)?
-
BuschmannMichael schrieb:
aber oft läuft dann später der Namensraum des Prameters ab, sodass ich später nicht mehr mit dem übergebenen Parameter arbeiten kann.
Wat
Du meinst wohl, die Variable muss nach Ende des Scopes erhalten bleiben. Dann musst du einen smart-pointer erzeugen, am besten unique_ptr.
-
BuschmannMichael schrieb:
Und noch eine Frage, wenn ich eine Constante Referenz übergebe, ist doch nur sozusagen die Speicheradresse constant, sodass man immer noch sämtliche Funktionen der Parameters ausführen kann(Also mann kann der Referenz keinen neuen Referendar zuweisen)?
Es macht keinen Sinn, von konstanten Referenzen zu sprechen (per Definition sind Referenzen unveränderlich). Einmal gebunden, kann der Verweis nicht mehr verändert werden.
Du meinst Const-Referenzen, oder ausführlicher "Referenzen auf const-Objekte". Das
constbedeutet, dass du das referenzierte Objekt durch diese Referenz nicht ändern kannst. Die Referenz selbst kannst du sowieso nie ändern.