为什么擦除End-Iterator不会给shared_ptr分段错误?

时间:2016-11-10 14:03:39

标签: c++ shared-ptr stdvector

以下代码运行时不会抛出segemntation错误。但是,对vec.erase的调用将删除最后一个元素,即删除"指针1和#34;,将vec的大小减小一个并离开"指针0"后面。

std::vector<std::shared_ptr<int>> vec;
vec.push_back(std::make_shared<int>(0));
vec.push_back(std::make_shared<int>(1));

vec.erase(vec.end());

std::cout << vec.size() << std::endl

只有int的相同代码会引发分段错误错误,如前所述。

这背后的原因是什么?

PS:使用GCC 5.2.1进行测试

1 个答案:

答案 0 :(得分:2)

  

与int一样的相同代码会引发分段错误错误,如预期的那样。

你的期望是错误的。未定义的行为不保证您的程序会崩溃。这对您来说可能是一个惊喜,但行为未定义。