Un smart pointer est un objet qui encapsule un pointeur, il y a donc bien une allocation de l'objet qui encapsule. Tu peux mettre ce que tu veux comme pointeur dedans, qu'il soit valide ou invalide ne change rien au fais qu'il y a bien allocation d'une coquille pour stocker le pointeur et son compteur de références.
Tout d'abord, je n'avais effectivement pas compris que tu parlais du détail d'implémentation (la coquille) pour argumenter que le smart pointer faisait une allocation à l'instantiation du shared_ptr. C'est un détail d'implémentation qu'il fait une allocation mémoire. On pourra imaginer un smart_pointer qui utilisera une zone statique, et dans ce cas là tu n'auras pas d'allocation comme tu l'entends.
En fait, ce que je comprenais de tes explications, c'est que je pensais que tu croyais que le smart pointer alloue un objet par défaut. Ce qui serait une erreur de conception, puisque tout les objets n'ont pas un constructeur par défaut explicite.
[^] # Re: templates variadiques
Posté par LupusMic (site web personnel, Mastodon) . En réponse à la dépêche Le standard C++0x a enfin été voté. Évalué à 1.
Tout d'abord, je n'avais effectivement pas compris que tu parlais du détail d'implémentation (la coquille) pour argumenter que le smart pointer faisait une allocation à l'instantiation du shared_ptr. C'est un détail d'implémentation qu'il fait une allocation mémoire. On pourra imaginer un smart_pointer qui utilisera une zone statique, et dans ce cas là tu n'auras pas d'allocation comme tu l'entends.
En fait, ce que je comprenais de tes explications, c'est que je pensais que tu croyais que le smart pointer alloue un objet par défaut. Ce qui serait une erreur de conception, puisque tout les objets n'ont pas un constructeur par défaut explicite.