我正在尝试使用指针向量并遇到以下我不太了解的行为:
#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;
}
使用 MinGW C++ 编译器 (g++),这给了我以下输出:
100
5640648
200
现在当然在删除指针时实际元素vec[0]
没有被删除,但请注意p2
根本没有插入向量中。尽管如此,打印第一个元素的值会返回这个看似无关的指针的值!此外,稍微重组代码以便p2
在删除之前声明p1
不会产生这种行为。
为了确保,我还用 MSVC++ 编译了它,它给了我以下(预期的)输出:
100
5484120
5484120
有人对第一个输出有解释吗?