我正在尝试使用指针向量并遇到以下行为,我不太明白:
#include <iostream>
#include <vector>
int main()
{
std::vector<int*> vec;
int* p1 = new int;
*p1 = 100;
vec.push_back(p1);
std::cout << *vec[0] << std::endl;
delete p1;
std::cout << *vec[0] << std::endl;
int* p2 = new int;
*p2 = 200;
std::cout << *vec[0] << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用MinGW C++编译器(g ++),这给了我以下输出:
100
5640648
200
Run Code Online (Sandbox Code Playgroud)
当然,vec[0]当删除指针时,实际元素没有被删除,但是注意p2根本没有插入向量中.仍然,打印第一个元素的值会返回这个看似无关的指针的值!此外,稍微重构代码以便p2在删除之前声明p1它不会产生此行为.
为了确保,我还用MSVC++编译了这个,它给了我以下(预期)输出:
100
5484120
5484120
Run Code Online (Sandbox Code Playgroud)
有没有人对第一个输出有解释?