Maison  >  Article  >  développement back-end  >  Pointeurs intelligents C++ : améliorer la sécurité et la fiabilité du code

Pointeurs intelligents C++ : améliorer la sécurité et la fiabilité du code

PHPz
PHPzoriginal
2024-05-09 10:06:02438parcourir

Les pointeurs intelligents sont des outils de gestion de la mémoire en C++. Ils améliorent la sécurité du code en libérant automatiquement les objets. Il existe trois types de pointeurs intelligents : unique_ptr (propriété exclusive), shared_ptr (propriété partagée) et faible_ptr (propriété plus faible). Utilisez des pointeurs intelligents pour libérer automatiquement les objets et éviter les fuites de mémoire : unique_ptr libère l'objet après la fin de la portée du pointeur ; shared_ptr libère l'objet lorsque le dernier pointeur est libéré. ​​faible_ptr n'augmente pas le nombre de références et est utilisé pour observer les objets gérés par d'autres pointeurs ; .

C++ 智能指针:提升代码安全性和可靠性

Pointeurs intelligents C++ : améliorez la sécurité et la fiabilité du code

Les pointeurs intelligents sont des outils puissants pour gérer la mémoire en C++. En gérant automatiquement la durée de vie des objets, ils simplifient la programmation et améliorent la sécurité du code.

Types de pointeurs intelligents

La bibliothèque standard C++ fournit plusieurs types de pointeurs intelligents :

  • unique_ptr : Propriété exclusive d'un objet, garantissant que l'objet est libéré à la fin de la portée du pointeur.
  • shared_ptr : Pointe vers la propriété partagée de l'objet, implémente le comptage de références et libère l'objet lorsque le dernier pointeur est relâché.
  • weak_ptr : Faible propriété d'un pointeur vers un objet, n'augmente pas le nombre de références de l'objet, utilisé pour observer les points vers des objets gérés par d'autres pointeurs.

Utiliser des pointeurs intelligents

L'utilisation de pointeurs intelligents est très simple :

// 使用 unique_ptr
std::unique_ptr<int> i = std::make_unique<int>(10);

// 使用 shared_ptr
std::shared_ptr<int> j = std::make_shared<int>(20);

// 使用 weak_ptr
std::weak_ptr<int> k(j);

Exemple pratique

Considérons l'exemple suivant qui démontre les avantages des pointeurs intelligents :

class Resource {
public:
    Resource() { std::cout << "Resource acquired" << std::endl; }
    ~Resource() { std::cout << "Resource released" << std::endl; }
};

void withoutSmartPointers() {
    // 创建资源但无法释放
    Resource* r = new Resource();
    std::cout << "Exiting function" << std::endl;
}

void withSmartPointers() {
    // 使用 unique_ptr 自动释放资源
    std::unique_ptr<Resource> r = std::make_unique<Resource>();
    std::cout << "Exiting function" << std::endl;
}

int main() {
    withoutSmartPointers();
    std::cout << std::endl;
    withSmartPointers();
    return 0;
}

Sortie :

Resource acquired
Exiting function
Resource released

Resource acquired
Exiting function
Sans smart pointeurs Dans le cas des pointeurs,

, l'objet est automatiquement libéré lorsque la portée du pointeur se termine, éliminant ainsi le risque 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