den folgenden Code sehen:Lebensdauer einer statischen Variablen in einer Funktion
#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
}
warum get1
die Deconstructor nennt aber get2
nicht? Soweit ich weiß, zerstören die statischen Variablen beim Beenden des Programms! aber warum nach dem Aufruf get1
Programm ruft den Dekonstruktor der statischen Variable?
Ich habe einen lesen ähnlich den Beitrag bei:
What is the lifetime of a static variable in a C++ function?
jemand sagt, daß es: "Die Lebensdauer der Funktion statischen Variablen das erste Mal beginnt [0] der Programmablauf trifft die Erklärung, und es endet bei Beendigung des Programms. "
das scheint hier nicht zu stimmen!
Warum sollte der zweite jemals den Destruktor aufrufen? Es wird mit neuen erstellt, ohne entsprechende Löschung. Es ist ein Speicherleck! Sie weisen das neue Objekt auch einer Referenz zu, dh es ist nicht mehr möglich, die Adresse des Benutzers zum Löschen zu erhalten. –