Ich bin neu bei shared_ptr und ich versuche, die genaue Funktionalität der .reset() - Funktion herauszufinden.Löscht mit .reset() auf einem std :: shared_ptr alle Instanzen
#include <memory>
#include <stdio>
using namespace std;
class SomeClass{};
int main()
{
shared_ptr<SomeClass> sp (nullptr);
//do some stuff, sp now has 10 co-owners
cout << sp.use_count << endl;
sp.reset();
cout << sp.use_count << endl;
return 0;
}
ausgeben würde
10
0
So, da ich die Reset-Funktion verwendet werden alle Instanzen aus dem Speicher gelöscht? Wie in, habe ich gerade alle möglichen Speicherlecks mit sp beseitigt? Offensichtlich war das ein Spielzeugbeispiel, das ich schnell erfunden habe, tut mir leid, wenn es irgendwelche Fehler hat.
Follow-up-Situation:
shared_ptr<SomeClass> returnThis() {
shared_ptr<SomeClass> someObject(new SomeClass(/*default constructor for example*/));
return someObject;
}
somehere in Haupt:
shared_ptr<SomeClass> mainObject;
mainObject = returnThis();
Does mainObject eine Verwendungsanzahl von 2 haben, weil in someobject eine Funktion erstellt wurde, aber nie gelöscht? Oder ist es eins und die Bereinigung wird automatisch durchgeführt, wenn der Wert zurückgegeben wird?
Whoops! Wenn Sie eine weitere Frage stellen möchten, klicken Sie oben auf der Seite auf die Schaltfläche "Frage stellen". Die Kurzgeschichte besagt, dass 'shared_ptr' existiert, um alle diese Dinge automatisch zu behandeln. Wenn also der * last * shared Pointer den Bereich verlässt, wird das Objekt zerstört. –