首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Iterator寿命

Iterator寿命
EN

Stack Overflow用户
提问于 2020-04-13 20:02:04
回答 1查看 73关注 0票数 2

情况就是这样:

代码语言:javascript
复制
vector <string>::iterator * it;
{
    vector <string> v{"asd", "asd"};
    auto iter = v.begin();
    it = new vector <string>::iterator(iter);
}
(**it) = string("asd");

现在,我在网络上找不到任何能告诉我这是UB还是有效代码的资源。

我的问题是:

当我创建迭代器时,如果迭代器的生存期比所引用的容器长,是未定义的行为,还是在标准中的某个地方定义的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-13 20:08:29

在你贴出的密码里,

代码语言:javascript
复制
(**it) = string("asd");

导致未定义的行为。

*iter是一个迭代器,但当您到达该行时,对应的vector已不存在。因此,**iter类似于取消引用悬空指针。顺便说一句,如果只使用iterator而不是iterator*,那么这种情况不会改变。

下面的代码还会导致未定义的行为。

代码语言:javascript
复制
vector <string>::iterator it;
{
    vector <string> v{"asd", "asd"};
    auto iter = v.begin();
    it = iter;
}
(*it) = string("asd");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61195804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档