在参数列表中构造一个对象并将指向该对象内部数据的指针传递给函数安全吗?

Blu*_*all 21 c++ string temporary-objects

下面的 C++ 代码格式正确吗?std::string函数执行完成之前还是之后会被销毁?

void my_function(const char*);

...

my_function(std::string("Something").c_str());
Run Code Online (Sandbox Code Playgroud)

我知道我可以做到my_function("Something"),但我用std::string这种方式来说明我的观点。

use*_*522 26

std::string 会在函数执行完成之前还是之后被销毁?

临时对象在其具体化的完整表达式的末尾(例如,通常是表达式语句的末尾)被销毁(有一些例外,这里不相关)。

这里的对象std::string是在跨越整个my_function(std::string("Something").c_str());表达式语句的完整表达式中具体化的临时对象。因此my_function在您的示例中返回后它会被销毁。