Durée de vie d'un type de retour (avec une référence)
Bonjour,
je m'interroge sur la durée de vie d'un objet retourné par une fonction. Celui-ci peut apparemment "survivre" plus ou moins longtemps
Code:
1 2 3 4 5
| std::ostringstream oss;
[...]
ApiQuiVeutDesChar( oss.str().c_str() )
// ici la string temporaire renvoyée par ostringstream::str() n'est détruite qu'après le retour
// de ApiQuiVeutDesChar (heureusement sinon la chaine renvoyée par c_str() ne serait plus valide) |
Mais dans ce cas suivant, l'objet temporaire n'est détruit qu'à la fin du bloc
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class TestDest
{
private:
public:
int m_i;
TestDest(int i = 0):m_i(i)
{ cout << "TestDest::TestDest()" << endl ; }
TestDest(const TestDest &)
{ cout << "TestDest::TestDest(const TestDest &)" << endl ; }
TestDest & operator = (const TestDest &)
{
cout << "TestDest::operator = (const TestDest &)" << endl ;
return *this;
}
~TestDest()
{ cout << "TestDest::~TestDest()" << endl ; }
};
[...]
TestDest function()
{
return TestDest();
}
[...]
{
TestDest & t = function();
cout << "Hello" << endl;
} |
Resultat (VC++ 2005)
Citation:
TestDest::TestDest()
Hello
TestDest::~TestDest()
En fait, c'est ce que je cherchais à faire (expérimentations :twisted: ), mais est-ce bien dans la norme :roll: ? (ou comportement indéfini :aie: ?)