我知道悬空句柄是指向无效数据的指针或引用。我用字符串和向量进行实验,下面是我的字符串代码:
char *p = NULL;
{
string s;
s.push_back('a');
s.push_back('b');
p = &s[0];
}
cout << *p << endl;
,结果是'a'。它让我感到惊讶,不应该是一个悬垂的指针吗?我认为对象应该被破坏,为什么p仍然指向有效内容?
我在上面的代码中用“向量”替换“字符串”,然后用矢量做另一个实验,这次没有打印。那么这是什么意思?字符串和向量组织其成员有什么区别吗?
答案 0 :(得分:2)
您正在调用未定义的行为,因此任何事情都可能发生。在你的情况下,恰好还没有覆盖内存。它也可能只是段错误,擦拭你的硬盘或唤醒鼻子恶魔。
答案 1 :(得分:1)
交通法规称,如果您等待绿灯,您可以保证能够安全过马路。
你抱怨说,并非所有穿过红灯的人都会被卡车立即碾碎。