X
krümelkacker schrieb:
Auweia! Das ist ja ein ganz schönes Durcheinander da.
krümelkacker schrieb:
Hier mal ein new . Das erzeugte Objekt per Referenz weitergeben.
Was spricht dagegen? Das Objekt gehört die ganze Zeit dem Server, bis er den Besitz deutlich durch std::unique_ptr abgibt.
krümelkacker schrieb:
Wieder einen Zeiger holen und den Besitz zwischenzeitlich an ein temporäres unique_ptr-Objekt übergeben (welcher es dann auch zerstört)
Genau hier wird der Besitz abgegeben...
krümelkacker schrieb:
und dann später nochmal über die Referenze deleten.
Das delete wird nur bei einer Exception aufgerufen. Wenn die Behandlung des Request in einem anderen Thread abläuft, kann ein Doppel-delete nicht auftreten.
krümelkacker schrieb:
Das Design ist nicht wirklich gut durchdacht bzgl Besitzverhältnisse
Ich habe nur zweimal new in meinem Code. Wozu gehört denn die SocketConnection?
Bei mir ist der Server solange verantwortlich, bis er sie mit std::unique_ptr explizit weitergibt. In meinem nicht reduzierten Code habe ich noch eine Liste mit allen SocketConnections.
krümelkacker schrieb:
und das mit den Rvalue-Referenzen und dem std::move hat da auch nichts zu suchen.
Sowas wie
try {
blah
} catch (...) {
delete soundwo;
throw
}
ist schonmal ein Antipattern. Dafür gibt es ja Dinge wie unique_ptr.
Wenn ich nen neuen Thread starte, der damit arbeitet, wie ich vor habe, zieh ich mir das Objekt unterm hintern weg... Wenn der Request noch nicht vollständig ist, wird die Funktion ja nochmal asynchron aufgerufen. Folglich auch dann kann ich es nicht löschen.
krümelkacker schrieb:
Da Du schon C++0x Mittel verwendest, kannst Du ja std::unique_ptr verwenden, um bei Funktionsaufrufen den Besitz zu übergeben (das ist dann auch selbstdokumentierend) oder eben als roher Zeiger, wobei ich einen rohen Zeiger immer nur dann nehmen würde, wenn der Besitz nicht weitergegeben wird, sondern der Zeiger nur "verliehen" wird.
Genauso habe ich es vor...
krümelkacker schrieb:
Habe ich schon das Zauberwort RAII verwendet?
Ich versuche immer nach RAII zu proggn... Wie gesagt... Ich habe versucht den Code zu reduzieren und meine Liste mit SocketConnections wegreduziert.
Und wenn ich nen neuen Thread starte muss ich den Besitz ja übergeben (oder kopieren), oder?
DANKE,
XSpille