我有以下代码:
std::string getString() {
std::string str("hello");
return str;
}
int main() {
const char* cStr = getString().c_str();
std::cout << cStr << std::endl; // this prints garbage
}
Run Code Online (Sandbox Code Playgroud)
我以为会发生的是,getString()将返回一个复制的str(getString()按价值计算收益); 因此,副本str将保持"活着" main()直到main()返回.这将cStr指向一个有效的内存位置:返回的副本的底层char[]或char*(或其他)保留在哪里.strgetString()main()
但是,显然并非如此,因为程序输出垃圾.那么,问题是,何时被str销毁,为什么?