In regards to when temporary objects get destroyed, is this valid:
FILE *f = fopen (std::string ("my_path").c_str (), "r");
Will the temporary be destroyed immediately after having evaluated the first argument to fopen
or after the fopen
call.
Testing with the following code:
#include <cstdio>
using namespace std;
struct A {
~A() { printf ("~A\n"); }
const char *c_str () { return "c_str"; }
};
void foo (const char *s) { printf ("%s\n", s); }
int main () {
foo (A().c_str());
printf ("after\n");
return 0;
}
gives:
c_str
~A
after
which indicates that the whole statement is first evaluated, and then any temporaries are destroyed. Is this ordering mandated by the standard or implementation-specific?
The temporary will be destroyed at the end of the expression, namely the ;
semicolon. So you are safe.
§ 12.2 ... Temporary objects are destroyed as the last step in evaluating the full-expression (1.9) that (lexically) contains the point where they were created. This is true even if that evaluation ends in throwing an exception.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With