Is constructing an object in an argument list and passing a pointer to internal data of the object to the function safe?

829 Views Asked by At

Is the C++ code below well-formed? Will the std::string get destroyed before or after the function finishes executing?

void my_function(const char*);

...

my_function(std::string("Something").c_str());

I know I could do my_function("Something"), but I am using std::string this way to illustrate my point.

1

There are 1 best solutions below

0
user17732522 On BEST ANSWER

Will the std::string get destroyed before or after the function finishes executing?

Temporary objects are destroyed (with some exceptions, none relevant here) at the end of the full-expression in which they were materialized (e.g. typically the end of an expression statement).

The std::string object here is such a temporary materialized in the full-expression that spans the whole my_function(std::string("Something").c_str()); expression statement. So it is destroyed after my_function returns in your example.