为什么我可以访问我刚从c ++中的stl向量中删除的元素?

Sha*_*awn 1 c++ stl vector erase

在这个例子中,我创建了一个包含一个整数的向量,然后我从向量中删除了该整数.向量的大小减小,但整数仍然存在!为什么整数仍然存在?大小为0的向量如何包含元素?

#include <vector>
#include <iostream>

using namespace std;

int main(int agrc, char* argv[])
{
    vector<int> v;
    v.push_back(450);

    cout << "Before" << endl;
    cout << "Size: " << v.size() << endl;
    cout << "First element: " << (*v.begin()) << endl;
    v.erase(v.begin());
    cout << "After" << endl;
    cout << "Size: " << v.size() << endl;
    cout << "First element: " << *(v.begin()) << endl;

    return(0);
}
Run Code Online (Sandbox Code Playgroud)

输出:

Before
Size: 1
First element: 450
After
Size: 0
First element: 450
Run Code Online (Sandbox Code Playgroud)

Nav*_*een 10

您通过取消引用无效的内存位置来调用未定义的行为.通常,delete为了提高效率,堆管理器不会立即释放已删除的内存.但是,这并不意味着您可以访问该内存位置,堆管理器可以在需要时将此内存位置用于其他目的.因此,如果取消引用无效的内存位置,您的程序将无法预测.

  • 在内部`vector :: erase()`将对存储的对象调用`delete`,因此出于同样的原因它是未定义的行为.`delete`是对象无效的原因. (2认同)