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 longtempsMais 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 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)Resultat (VC++ 2005)
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; }En fait, c'est ce que je cherchais à faire (expérimentations ), mais est-ce bien dans la norme ? (ou comportement indéfini ?)TestDest::TestDest()
Hello
TestDest::~TestDest()
Partager