voir le code suivant:durée de vie d'une variable statique dans une fonction
#include <iostream>
using namespace std;
struct T
{
~T()
{
cout << "deconstructor calling\n";
}
};
static T& get1()
{
static T x;
return x;
}
static T& get2()
{
static T& x = *new T;
return x;
}
int main()
{
get1();//calls the deconstructor
get2(); //dosent call the deconstructor
}
pourquoi get1
appelle la deconstructor mais get2
ne fonctionne pas? autant que je sache, les variables statiques détruisent quand vous terminez le programme! mais pourquoi après avoir appelé get1
programme appelle le déconstructeur de la variable statique?
J'ai un poste similaire lire à:
What is the lifetime of a static variable in a C++ function?
quelqu'un dit là que: «La durée de vie des variables statiques de fonction commence la première fois [0] le déroulement du programme rencontre la déclaration et se termine à la fin du programme. "
cela ne semble pas être vrai ici!
Pourquoi le deuxième appelait-il le destructeur? Il est créé en utilisant new, sans suppression correspondante. C'est une fuite de mémoire! Vous affectez également le nouvel objet à une référence, ce qui signifie qu'il n'est plus possible d'obtenir son adresse pour appeler la suppression. –