Perché non è distruttore per oggetto temporaneo chiamato dopo aver valutato una full-espressione:temporanea oggetto distruzione
#include <iostream>
struct A
{
int a;
A();
~A();
};
A::~A()
{
std::cout << "~A()" << std::endl;
}
A::A()
{
std::cout << "A()" << std::endl;
}
int main()
{
A b = A(); //Constructing of temporary object and applies copy-initalization
std::cout << "side effect" << std::endl;
//Destructor calling.
}
uscita:
A()
side effect
~A()
Ma 12,2/3 [ class.temporary] dice:
Quando un'implementazione introduce un oggetto temporaneo di una classe che ha un costruttore non banale (12.1, 12.8), deve assicurare che venga chiamato un costruttore per l'oggetto temporaneo. Allo stesso modo, il distruttore deve essere chiamato temporaneamente con un distruttore non banale (12.4). Gli oggetti temporanei vengono distrutti come ultimo passaggio in valutando l'espressione intera (1.9) che (in modo lessicale) contiene il punto in cui sono stati creati.
'-fno-Elide-constructors', vedere [DEMO] (http://coliru.stacked-crooked.com/a/022dd0982db9c024) –