Les types de pointeurs sont-ils le seul moyen d '"empêcher" que le constructeur soit appelé dans la déclaration?

J'ai essayé de chercher ceci, mais je n'ai trouvé aucune réponse. Regardons ceci:

class Foo
{
    Foo();
    Bar a;//'a', the object, gets created (even if I don't want to!)
    Bar* b;//'b', the pointer, gets created, but the object doesn't
}

Foo::Foo()
{
    a = a();//I'd like to create 'a' here instead. This just "replaces" it
    b = new Bar();//'b', the object, gets created
}

Ma question est la suivante: puis-je déclarer un objet sans le créer également? Ou dois-je toujours utiliser des pointeurs?

0
Pourquoi voudriez-vous? Qu'essayez-vous d'accomplir?
ajouté l'auteur StoryTeller, source

1 Réponses

Ma question est la suivante: puis-je déclarer un objet sans le créer également?

Non.

Ou dois-je toujours utiliser des pointeurs?

Non. Pointers are one option. There are others, such as boost::optional (std::optional is also in the process of standardization). There are also smart pointers (std::unique_ptr or std::shared_ptr). A standardly available, pre-c++11 option which is easier to manage than a raw pointer would be a std::vector where you only ever add one element.

Mais êtes-vous absolument sûr que vous en avez besoin?

0
ajouté
Je n'en ai vraiment besoin pour rien, car j'ai utilisé des types de pointeurs dans des scénarios où j'ai besoin d'un objet pour avoir des variables membres qui doivent être créées par exemple dans un certain ordre. Je me demandais juste ça. Venant du monde de Java et C#, il semble contre-intuitif que déclarer un objet l'initialise aussi. Merci pour votre réponse.
ajouté l'auteur manabreak, source