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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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)
TestDest::TestDest()
Hello
TestDest::~TestDest()
En fait, c'est ce que je cherchais à faire (expérimentations ), mais est-ce bien dans la norme ? (ou comportement indéfini ?)