以下代码运行时不会抛出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进行测试
答案 0 :(得分:2)
与int一样的相同代码会引发分段错误错误,如预期的那样。
你的期望是错误的。未定义的行为不保证您的程序会崩溃。这对您来说可能是一个惊喜,但行为未定义。