Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Fournir des Destructeurs Personnalisés pour les Pointeurs Intelligents | Sujets Avancés
Pointeurs Intelligents C++
course content

Contenu du cours

Pointeurs Intelligents C++

Pointeurs Intelligents C++

1. Introduction aux Pointeurs Intelligents
2. Pointeurs Uniques
3. Pointeurs Partagés
4. Pointeurs Faibles
5. Sujets Avancés

book
Fournir des Destructeurs Personnalisés pour les Pointeurs Intelligents

Les destructeurs personnalisés offrent un contrôle précis sur le nettoyage des ressources, garantissant une désallocation efficace de la mémoire pour diverses ressources telles que les descripteurs de fichiers, les connexions et les structures de données personnalisées.

Par exemple, lors de la gestion de fichiers avec des pointeurs intelligents, un destructeur personnalisé peut garantir que la mémoire dynamique est libérée et que le fichier est correctement fermé lorsque le pointeur sort de la portée. Voici comment :

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 }

Lors de la création du pointeur unique, nous passons custom_file_deleter en tant que paramètre de modèle. Le mot-clé decltype extrait son type lors de la compilation. Ce destructeur personnalisé assure à la fois la désallocation de la mémoire et la fermeture du fichier en une seule fonction.

Pointeurs Partagés et Destructeurs Personnalisés

Pour utiliser un destructeur personnalisé avec un pointeur partagé, passez-le au constructeur du pointeur partagé.

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 }

Créer un pointeur partagé vers un entier et spécifier un destructeur personnalisé dans le constructeur.

question mark

Pourquoi utiliseriez-vous un destructeur personnalisé avec un pointeur intelligent ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

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