Peut std::unique_ptr
En C , certains modèles de la bibliothèque standard nécessitent des types complets pour l'instanciation. Cependant, std::shared_ptr et std::unique_ptr sont des exceptions partielles, permettant l'instanciation avec des types incomplets pour des membres spécifiques.
Raison derrière l'exception partielle :
Pour éviter les exceptions non définies comportement pouvant résulter de la suppression de types incomplets à l'aide de pointeurs bruts, std::shared_ptr et std::unique_ptr autorise les types incomplets dans certains cas. Cela permet des expressions idiomatiques telles que l'utilisation de pointeurs intelligents avec PIMPL tout en minimisant les risques.
Exigences Unique_ptr pour les types incomplets :
Contrairement à shared_ptr, unique_ptr nécessite des types complets dans une capacité plus limitée, lorsque ~P(), reset() et move assign Operator=() sont utilisé.
Exigences de Shared_ptr pour les types incomplets :
Shared_ptr peut être instancié avec des types incomplets lorsqu'il est utilisé dans son constructeur par défaut P(), copier le constructeur P(const P&) , et déplacez le constructeur P(P&&). Cependant, des opérations telles que reset() et move assignation =() nécessitent des types complets.
Conclusion :
Bien que unique_ptr et shared_ptr offrent tous deux une prise en charge partielle des types incomplets, leur les exigences varient. Il est essentiel de comprendre ces exigences pour éviter les comportements indéfinis et garantir une utilisation efficace. En cas d'erreurs liées aux déclarations forward, il convient d'envisager la possibilité de comportements spécifiques à l'implémentation.
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!