Maison > Article > développement back-end > Pointeurs intelligents C++ : rendez les pointeurs plus intelligents et éliminez les problèmes de gestion de la mémoire
Pointeur intelligent : un pointeur spécial en C++ qui encapsule un pointeur brut et fournit des fonctions supplémentaires. Tapez : std::unique_ptr : propriété unique, la mémoire est libérée après l'expiration du pointeur. std::shared_ptr : propriété partagée, la mémoire est libérée lorsque la dernière référence disparaît. std::weak_ptr : propriété faible, n'empêche pas la destruction de l'objet et évite les références circulaires. Utilisation : Déclarez un type de pointeur intelligent pour remplacer les pointeurs ordinaires. Cas pratique : utilisez std::shared_ptr pour gérer le flux de fichiers et fermer automatiquement le flux de fichiers, qu'une exception se produise ou non.
Pointeurs intelligents C++ : rendez les pointeurs plus intelligents et débarrassez-vous des soucis de gestion de la mémoire
Dans le C++ moderne, les pointeurs intelligents sont des outils puissants pour améliorer la robustesse des applications et l'efficacité de la gestion de la mémoire. Ils peuvent automatiser les tâches de gestion de la mémoire. protégeant ainsi les développeurs des bugs potentiels et des fuites de mémoire.
Qu'est-ce qu'un pointeur intelligent ?
Les pointeurs intelligents sont des pointeurs spéciaux en C++ qui encapsulent des pointeurs bruts et fournissent des fonctionnalités supplémentaires, notamment la libération automatique de la mémoire, la sécurité des exceptions et la gestion du nombre de références.
Types de pointeurs intelligents
Il existe trois types de pointeurs intelligents couramment utilisés en C++ :
Comment utiliser
L'utilisation des pointeurs intelligents est simple, il suffit de déclarer le type de pointeur intelligent en remplacement d'un pointeur normal, comme indiqué ci-dessous :
// 使用 unique_ptr 管理一个 int std::unique_ptr<int> number(new int(10)); // 使用 shared_ptr 管理一个 string std::shared_ptr<std::string> text(new std::string("Hello world!"));
Cas pratique
Considérez le scénario suivant, dans lequel nous voulons Lire le contenu d'un fichier via la fonction de lecture de fichier :
std::string readFile(const std::string& fileName) { std::ifstream file(fileName); // 检查文件是否打开 if (!file.is_open()) { throw std::runtime_error("无法打开文件!"); } // 读取文件内容到字符串中 std::string content; file >> content; // 关闭文件 file.close(); // 返回文件内容 return content; }
Il y a deux problèmes principaux avec ce code :
file.close()
responsable de la fermeture du fichier doit être exécuté en toutes circonstances, même si une exception se produit. file.close()
调用需要在任何情况下都执行,即使出现异常也不例外。使用智能指针,我们可以轻松解决这些问题:
std::string readFile(const std::string& fileName) { // 使用 shared_ptr 管理文件流 std::shared_ptr<std::ifstream> file(new std::ifstream(fileName)); // 检查文件是否打开 if (!*file) { throw std::runtime_error("无法打开文件!"); } // 读取文件内容到字符串中 std::string content; *file >> content; // 文件流将由 shared_ptr 自动关闭 return content; }
通过使用 std::shared_ptr
std::shared_ptr
, le flux de fichiers sera automatiquement fermé, qu'une exception se produise ou non. De plus, le code gère désormais en toute sécurité les échecs d'ouverture du fichier et le communique à l'appelant via une exception. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!