Kursinhalt
C++ Smart Pointers
C++ Smart Pointers
Vorteile der Verwendung von Smart-Pointern und Referenzen
Es gibt mehrere Vorteile der Verwendung von Smart-Pointern und Referenzen in C++. Lassen Sie uns in diesem Kapitel einige davon betrachten, bevor wir in den praktischeren Teil dieses Kurses übergehen.
Vorteile von Smart-Pointern
Smart-Pointer ermöglichen es Entwicklern, ausdrucksstärkeren, saubereren und wartungsfreundlicheren Code zu schreiben. Dies reduziert erheblich das Potenzial für technische Schulden oder menschliche Fehler.
Durch die automatische Freigabe verringern Smart-Pointer nicht nur die Wahrscheinlichkeit von ungültigem Speicherzugriff und Speicherlecks, sondern ermöglichen es Entwicklern auch, ihre Zeit produktiver zu nutzen.
Smart-Pointer verbessern auch die Ausnahmesicherheit. Wenn eine Ausnahme ausgelöst wird, stellen sie sicher, dass Ressourcen automatisch bereinigt werden, ohne dass ein manuelles Eingreifen erforderlich ist.
main
#include <iostream> #include <memory> void processResource() { // simulate resource allocation with a smart pointer std::shared_ptr<int> smartPtr(new int(42)); // suppose an exception occurs during processing throw std::runtime_error("An exception occurred during resource processing"); } int main() { try { processResource(); } catch (const std::exception& e) { std::cerr << "Exception caught: " << e.what() << std::endl; } // at this point, you don't need to manually release the resource that the smart pointer held. // the smart pointer will automatically clean up the resource when it goes out of scope. std::cout << "Program still continues after exception handling" << std::endl; // the smart pointer ensures that the resource is safely deallocated, even in the presence of exceptions. }
Im obigen Code stoßen wir auf eine Ausnahme, während wir eine Ressource verarbeiten, die mit einem Shared Pointer zugewiesen wurde. Da ein Shared Pointer ausnahmesicher ist, gibt er die Ressource trotz der Ausnahme automatisch frei. Lesen Sie die Codekommentare für mehr Klarheit.
Denken Sie daran
Smart Pointer können die Leistung optimieren, indem sie einen effizienteren Modus der Speicherzuweisung und -freigabe bieten.
Vorteile von Referenzen
Referenzen können auch die Lesbarkeit und Ausdruckskraft Ihres Codes verbessern. Wenn sie mit klaren Namenskonventionen verwendet werden, machen sie Ihren Code selbstdokumentierend. Betrachten Sie die folgende Funktion:
Example
void calculateTotalPrice(const std::vector<double>& prices, double& total) { // calculate the total price of items total = 0.0; //initialize the total for (double price : prices) { // iterate over the vector total += price; // calculate the total price } }
Allein durch die Betrachtung der Funktionsdefinition wird sofort deutlich, dass die Variable „total“ modifiziert wird, um den Gesamtpreis an den Aufrufer zu kommunizieren.
-
Referenzen sind auch relativ sicherer zu verwenden als Zeiger, da sie bei der Initialisierung nicht auf null gesetzt werden können. Bei umsichtiger Verwendung können Referenzen Entwicklern helfen, Laufzeitfehler und Abstürze zu vermeiden.
-
Referenzen erlauben es Ihnen, die Werte der ursprünglichen Variable zu ändern, was zu kompakterem und effizienterem Code führt. Zum Beispiel können Sie beim Iterieren über die Elemente einer Sammlung eine Referenz verwenden, um Elemente direkt zu aktualisieren, anstatt mit Indizes zu arbeiten.
Im obigen Code verwenden wir Referenzen, um über einen Vektor zu iterieren, anstatt Indizes.
Danke für Ihr Feedback!