Voici la façon la plus simple d'expliquer ce qui s'est passé:
Dans main (), vous avez créé une chaîne de caractères et l'a transmis au constructeur. Cette chaîne instance n'existe que dans le constructeur. Dans le constructeur, vous avez assigné le membre à pointer directement vers cette instance. Lors de l'étendue de la gauche, le constructeur, la chaîne d'instance a été détruit, et membre souligné un objet de type string qui n'existait plus. Avoir Bac À Sable.membre de point de référence à l'extérieur de son champ d'application ne sera pas titulaire de ces instances externes dans le champ d'application.
Si vous souhaitez corriger votre programme pour afficher le comportement que vous désirez, effectuez les modifications suivantes:
int main()
{
string temp = string("four");
Sandbox sandbox(temp);
cout << sandbox.member << endl;
return 0;
}
Maintenant temp de passer hors de portée à la fin de main() plutôt qu'à la fin du constructeur. Cependant, c'est une mauvaise pratique. Votre membre de la variable ne doit jamais être une référence à une variable qui existe en dehors de l'instance. Dans la pratique, vous ne savez jamais quand cette variable passe hors de portée.
Ce que je recommande est de définir bac à sable.membre en tant que const string member;
Cette copie temporaire du paramètre de données dans la variable membre au lieu d'affecter la variable de membre temporaire pour le paramètre lui-même.