情况就是这样:
vector <string>::iterator * it;
{
vector <string> v{"asd", "asd"};
auto iter = v.begin();
it = new vector <string>::iterator(iter);
}
(**it) = string("asd");现在,我在网络上找不到任何能告诉我这是UB还是有效代码的资源。
我的问题是:
当我创建迭代器时,如果迭代器的生存期比所引用的容器长,是未定义的行为,还是在标准中的某个地方定义的?
发布于 2020-04-13 20:08:29
在你贴出的密码里,
(**it) = string("asd");导致未定义的行为。
*iter是一个迭代器,但当您到达该行时,对应的vector已不存在。因此,**iter类似于取消引用悬空指针。顺便说一句,如果只使用iterator而不是iterator*,那么这种情况不会改变。
下面的代码还会导致未定义的行为。
vector <string>::iterator it;
{
vector <string> v{"asd", "asd"};
auto iter = v.begin();
it = iter;
}
(*it) = string("asd");https://stackoverflow.com/questions/61195804
复制相似问题