Question

Après avoir lu cet article sur le blog de Herb Sutter, j'expérimenta un peu et a couru dans quelque chose qui me déconcerte. J'utilise Visual C ++ 2005, mais je serais surpris si cela dépendait la mise en œuvre.

Voici mon code:

#include <iostream>

using namespace std;

struct Base {
    //Base() {}
    ~Base() { cout << "~Base()" << endl; }
};

int main()
{
    const Base & f = Base();
}

Lors de l'exécution, il affiche "~Base()" deux fois ... Mais si je Décommentez le constructeur, il affiche seulement une fois

Quelqu'un at-il une explication?

Était-ce utile?

La solution

Cela dépend la mise en œuvre.

La norme permet une copie de se produire lors de la liaison temporaire à une référence const. Dans votre cas, VC ++ effectue une copie uniquement lorsque le constructeur est implicitement défini. Cela est inattendu, mais autorisé.

C ++ 1x corrigera cette .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top