Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Bereitstellung Benutzerdefinierter Löschfunktionen für Smart-Pointer | Fortgeschrittene Themen
C++ Smart Pointers
course content

Kursinhalt

C++ Smart Pointers

C++ Smart Pointers

1. Einführung in Smart Pointers
2. Einzigartige Zeiger
3. Gemeinsame Zeiger
4. Schwache Zeiger
5. Fortgeschrittene Themen

book
Bereitstellung Benutzerdefinierter Löschfunktionen für Smart-Pointer

Benutzerdefinierte Deleter bieten präzise Kontrolle über die Bereinigung von Ressourcen und gewährleisten eine effiziente Speicherfreigabe für verschiedene Ressourcen wie Dateihandles, Verbindungen und benutzerdefinierte Datenstrukturen.

Zum Beispiel kann ein benutzerdefinierter Deleter beim Umgang mit Dateien mit Smart-Pointern sicherstellen, dass sowohl der dynamische Speicher freigegeben als auch die Datei ordnungsgemäß geschlossen wird, wenn der Zeiger den Gültigkeitsbereich verlässt. So geht's:

cpp

main

copy
1234567891011121314151617181920212223
#include <iostream> #include <memory> #include <fstream> void custom_file_deleter(std::ofstream* file) { // Check if file object is accessible and file is open if (file && file->is_open()) file->close(); delete file; // Release memory } int main() { // Creating a smart pointer to a file with a custom deleter std::unique_ptr<std::ofstream, decltype(&custom_file_deleter)> p_file(new std::ofstream("example.txt"), &custom_file_deleter); if (filePtr->is_open()) *filePtr << "Writing to the file using a smart pointer with a custom deleter!\n"; else std::cout << "Failed to open the file!\n"; // Smart pointer automatically closes the file when it goes out of scope }

Beim Erstellen des einzigartigen Zeigers übergeben wir custom_file_deleter als Template-Parameter. Das Schlüsselwort decltype extrahiert seinen Typ zur Kompilierzeit. Dieser benutzerdefinierte Deleter sorgt sowohl für die Speicherfreigabe als auch für das Schließen der Datei in einer einzigen Funktion.

Geteilte Zeiger und benutzerdefinierte Deleter

Um einen benutzerdefinierten Deleter mit einem geteilten Zeiger zu verwenden, übergeben Sie ihn an den Konstruktor des geteilten Zeigers.

cpp

main

copy
1234567891011121314151617181920
#include <iostream> #include <memory> // Custom deleter function for a resource void custom_resource_deleter(int* pointer) { std::cout << "Custom deleter called for resource at address: " << pointer << std::endl; delete ptr; } int main() { // Creating a shared pointer with a custom deleter std::shared_ptr<int> p_shared_custom_deleter(new int(42), custom_resource_deleter); // Accessing the shared resource std::cout << "Shared pointer value: " << *p_shared_custom_deleter << std::endl; // The shared pointer automatically manages the resource using the custom deleter }

Erstellen eines Shared Pointers auf eine Ganzzahl und Festlegen eines benutzerdefinierten Löschers im Konstruktor.

question mark

Warum würden Sie einen benutzerdefinierten Löscher mit einem Smart Pointer verwenden?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 1
We're sorry to hear that something went wrong. What happened?
some-alt