C++-Smart-Pointer-Lebenszyklus: Erstellung: Erstellen Sie einen Smart-Pointer, wenn Speicher zugewiesen wird. Eigentumsübertragung: Übertragen Sie das Eigentum durch einen Umzugsvorgang. Freigabe: Speicher wird freigegeben, wenn ein Smart Pointer den Gültigkeitsbereich verlässt oder explizit freigegeben wird. Objektzerstörung: Wenn das Objekt, auf das gezeigt wird, zerstört wird, wird der intelligente Zeiger zu einem ungültigen Zeiger.
C++ Smart Pointer: Umfassende Analyse seines Lebenszyklus
Einführung
Ein Smart Pointer ist ein spezieller Zeiger in C++, der zur Verwaltung von dynamisch zugewiesenem Speicher verwendet wird. Im Gegensatz zu Rohzeigern sind intelligente Zeiger dafür verantwortlich, den Speicherstatus des Objekts, auf das sie zeigen, zu verfolgen und diesen Speicher automatisch freizugeben, wenn das Objekt nicht mehr benötigt wird. Dies trägt dazu bei, häufige Programmierfehler wie Speicherverluste und fehlende Zeiger zu vermeiden.
Typen
Die C++-Standardbibliothek bietet vier Haupttypen von intelligenten Zeigern:
Lebenszyklus
1. Intelligente Zeiger können erstellt werden, wenn das Objekt Speicher zuweist, genau wie bei der Verwendung von Rohzeigern:
auto ptr = std::make_unique<int>(42);
2. Eigentumsübertragung
Intelligente Zeiger können verschoben werden durch ( move)-Vorgang überträgt den Besitz:
auto ptr2 = std::move(ptr); // ptr2 现在拥有对整数对象的唯一所有权
3. Release
Wenn ein Smart Pointer seinen Gültigkeitsbereich verlässt oder explizit freigegeben wird, gibt er den Speicher frei, den er besitzt:
{ auto ptr = std::make_unique<int>(42); // ... } // ptr 在此处释放
4 Wenn das Objekt zerstört wird, wird der Smart Pointer zu einem ungültigen Zeiger:
int* ptr = new int(42); auto sptr = std::make_shared<int>(ptr); delete ptr; // ptr 被销毁 sptr->get(); // sptr 现在指向一个无效指针,因此 get() 会抛出异常
Praktischer Fall
So verwenden Sie Smart Pointer zum Verwalten dynamisch zugewiesener Arrays:
// 原始指针版本 int* arr = new int[10]; // 分配数组 // ... delete[] arr; // 释放数组 // 智能指针版本 std::unique_ptr<int[]> arr = std::make_unique<int[]>(10); // 分配数组 // ... // arr 在离开范围时自动释放
Die Smart Pointer-Version ist sicherer, weil sie verhindert Speicherlecks und baumelnde Zeiger.
Das obige ist der detaillierte Inhalt vonC++-Smartpointer: eine umfassende Analyse ihres Lebenszyklus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!