Pour le code suivant:Deux appels à destructor
#include<iostream>
#include<vector>
#include<string>
using namespace std;
struct Test
{
string Str;
Test(const string s) :Str(s)
{
cout<<Str<<" Test() "<<this<<endl;
}
~Test()
{
cout<<Str<<" ~Test() "<<this<<endl;
}
};
struct TestWrapper
{
vector<Test> vObj;
TestWrapper(const string s)
{
cout<<"TestWrapper() "<<this<<endl;
vObj.push_back(s);
}
~TestWrapper()
{
cout<<"~TestWrapper() "<<this<<endl;
}
};
int main()
{
TestWrapper obj("ABC");
}
Ce fut la sortie que je suis sur mon MSVC++ compilateur:
TestWrapper() 0018F854
ABC Test() 0018F634
ABC ~ test() 0018F634
~ TestWrapper() 0018F854
ABC ~ test() 003D8490
Pourquoi re sont deux appels à Test destructor bien qu'un seul objet Test soit en cours de création. Y a-t-il un objet temporaire créé entre? Si oui, pourquoi il n'y a pas d'appel à son constructeur correspondant?
Ai-je raté quelque chose?
Vous avez dit "et l'objet temporaire est détruit après qu'il a été copié dans le vecteur". Le dernier appel de destructeur concerne l'objet temporaire. Pourquoi n'est-il pas détruit immédiatement? –
Non, le premier appel de destructeur concerne l'objet temporaire. L'objet temporaire est construit avec un argument de chaîne, ce qui explique pourquoi le constructeur est appelé. – Artelius
Alors pourquoi ces deux valeurs de "this" sont-elles similaires: ABC Test() 0018F634 ABC ~ Test() 0018F634 –