Maison >développement back-end >C++ >Comment les pointeurs intelligents C++ sont-ils intégrés dans la bibliothèque de modèles standard (STL) ?
Les pointeurs intelligents C++ sont intégrés à STL pour faciliter la gestion des pointeurs et éviter les problèmes de mémoire. STL contient quatre types de pointeurs intelligents : std::unique_ptr : pointe vers un objet appartenant à un propriétaire unique std::shared_ptr : pointe vers un objet appartenant à plusieurs propriétaires std::weak_ptr : pointe vers une référence faible à un objet potentiellement invalide std::auto_ptr ( obsolète)
Les pointeurs intelligents en C++ sont conçus pour simplifier la gestion des pointeurs et éviter des problèmes tels que des fuites de mémoire et des pointeurs suspendus. Pour faciliter l'utilisation, des pointeurs intelligents ont été intégrés à la bibliothèque de modèles standard (STL).
Il existe quatre types de pointeurs intelligents en STL :
std::unique_ptr
: pointe vers un objet appartenant à un propriétaire uniquestd::unique_ptr
:指向唯一所有权对象std::shared_ptr
:指向多重所有权对象std::weak_ptr
:指向潜在无效对象的弱引用std::auto_ptr
:已废弃,不建议使用智能指针已集成到 STL 中,这意味着您可以针对任何 STL 容器使用它们。例如:
// 使用 unique_ptr 存储整数 std::vector<std::unique_ptr<int>> int_ptrs; // 使用 shared_ptr 存储字符串 std::list<std::shared_ptr<std::string>> str_ptrs;
假设我们要创建一个包含文件路径的容器。我们可以使用智能指针来确保在容器的生存期内文件路径对象不会被意外销毁。
#include <vector> #include <memory> class FilePath { public: FilePath(const std::string& path) : path_(path) {} ~FilePath() = default; private: std::string path_; }; int main() { // 使用 unique_ptr 存储 FilePath 在 vector 中 std::vector<std::unique_ptr<FilePath>> file_paths; file_paths.emplace_back(std::make_unique<FilePath>("path/to/file1")); file_paths.emplace_back(std::make_unique<FilePath>("path/to/file2")); // 使用 FilePath 对 vector 进行迭代,不会出现悬垂指针 for (auto& file_path : file_paths) { std::cout << file_path->path_ << std::endl; } return 0; }
这段代码使用 std::unique_ptr
来管理 FilePath
std::shared_ptr code> : Pointe vers un objet multi-propriété
std::weak_ptr
: Une référence faible à un objet potentiellement invalide🎜std:: auto_ptr
: obsolète, obsolète 🎜Intégré dans STL🎜🎜Les pointeurs intelligents sont intégrés dans STL, ce qui signifie que vous pouvez les utiliser contre n'importe quel conteneur STL. Par exemple : 🎜rrreee🎜Cas pratique🎜🎜Supposons que nous souhaitions créer un conteneur contenant un chemin de fichier. Nous pouvons utiliser des pointeurs intelligents pour garantir que l'objet chemin de fichier n'est pas accidentellement détruit pendant la durée de vie du conteneur. 🎜rrreee🎜Ce code utilise std::unique_ptr
pour gérer les objets FilePath
. Lorsque le conteneur sort de la portée, le pointeur intelligent détruira automatiquement l'objet vers lequel il pointe, garantissant ainsi l'absence de fuite de mémoire. 🎜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!