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:
main.cpp
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.
main.cpp
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.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 5.56
Bereitstellung Benutzerdefinierter Löschfunktionen für Smart-Pointer
Swipe um das Menü anzuzeigen
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:
main.cpp
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.
main.cpp
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.
Danke für Ihr Feedback!