Comprendre la différence d'efficacité entre std::make_shared et construire directement un std : :shared_ptr peut être une tâche déroutante. Ici, nous approfondissons une comparaison détaillée pour élucider les subtilités de chaque méthode.
Considérez les extraits de code suivants :
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo"));
Direct std::shared_ptr Construction :
std::make_shared Utilisation :
La principale différence réside dans le nombre d'allocations de tas requises :
Cette allocation singulière en make_shared élimine le besoin d'un nouvel appel explicite, ce qui entraîne une efficacité accrue.
Pré-C 17 :
La gestion des exceptions pouvait auparavant faire des ravages, car le pointeur brut n'a peut-être pas été transmis en toute sécurité au constructeur shared_ptr.
C 17 et Plus tard :
Ce problème a été résolu grâce aux changements dans l'ordre d'évaluation des arguments de fonction. Aujourd'hui, les exceptions sont gérées avec élégance, garantissant l'intégrité de la mémoire.
Comme Casey l'a souligné, un inconvénient potentiel découle de l'allocation unique :
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!