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) ?

Comment les pointeurs intelligents C++ sont-ils intégrés dans la bibliothèque de modèles standard (STL) ?

WBOY
WBOYoriginal
2024-06-02 09:56:57333parcourir

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)

C++ 智能指针如何集成到标准模板库 (STL) 中?

Comment les pointeurs intelligents C++ sont intégrés dans la bibliothèque de modèles standard (STL)

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).

Types de pointeurs intelligents

Il existe quatre types de pointeurs intelligents en STL :

  • std::unique_ptr : pointe vers un objet appartenant à un propriétaire unique
  • std::unique_ptr:指向唯一所有权对象
  • std::shared_ptr:指向多重所有权对象
  • std::weak_ptr:指向潜在无效对象的弱引用
  • std::auto_ptr:已废弃,不建议使用

集成到 STL

智能指针已集成到 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 来管理 FilePathstd::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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn