die Frage über die Belegung mit boost::shared_ptr (vs. die reset () - Funktion)
Sorry, wenn dies explizit irgendwo beantwortet, aber ich bin ein wenig verwirrt durch die boost-Dokumentation und Artikeln, die ich gelesen habe, online.
Sehe ich, dass ich mit der reset () - Funktion, um den Speicher freizugeben, innerhalb eines shared_ptr (vorausgesetzt der Referenzzähler geht auf null), z.B.,
shared_ptr<int> x(new int(0));
x.reset(new int(1));
Das ist, glaube ich, würde das Ergebnis in der Schaffung von zwei integer-Objekte, und am Ende diese beiden Zeilen die ganze Zahl gleich null wäre, aus dem Speicher gelöscht.
Aber was ist, wenn ich den folgenden code-block:
shared_ptr<int> x(new int(0));
x = shared_ptr<int>(new int(1));
Natürlich, jetzt *x == 1 ist true, aber das original-integer-Objekt (gleich null) aus dem Speicher gelöscht oder habe ich durchgesickert, dass der Speicher?
Scheint es mir, dass dies ein Problem des zuweisungsoperators eine Verringerung der shared_ptr Verweiszähler, aber ein Blick auf den source-code scheint nicht die Frage zu klären, für mich. Hoffentlich jemand mehr erfahren oder kompetent kann mir helfen. Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Dokumentation ist ziemlich klar:
So ist es nur swaps Eigentum mit dem temporären Objekt, das Sie erstellen. Die temporäre dann abläuft, wird eine Verringerung der reference count. (Und freigeben, wenn null.)
Den Zweck dieser Container ist nicht zu Speicherverlust. Also Nein, Sie brauchen nicht zu sorgen über undichte Dinge, wenn Sie versuchen, um zu versauen Dinge auf Zwecke. (In anderen Worten, Sie wahrscheinlich nicht brauchen, um Zweifel Boost weiß, was Sie tun.)
Haben Sie nicht Speicherleck. Die Speicher für die erste int-Objekt wird gelöscht.