【发布时间】:2012-01-09 15:48:30
【问题描述】:
我有以下代码:
using namespace std;
vector<string*> v;
{
string s = "hello";
v.push_back(&s);
}
{
string ss = "goodbye";
v.push_back(&ss);
}
cout << v.at(0)->c_str() << endl;
cout << v.at(1)->c_str() << endl;
打印出来的
goodbye
goodbye
如果我删除范围括号,代码将打印出来
hello
goodbye
当我离开第一个作用域时究竟发生了什么,指向第一个字符串的指针现在指向第二个?
【问题讨论】:
-
UB,卢克!这只是UB。你很幸运,你的电脑没有爆炸。
-
能否请您参考这个问题的著名答案:stackoverflow.com/questions/6441218/…
-
是的,又是crossing the streams。
-
@benj:感谢您的链接。很棒的阅读。