引用vector里的元素被删除后,引用会怎么样?
引用的定义不多说,直接看做变量的别名就可以了。有一天写着写着代码,突然想到,如果对vector里某个元素设置引用后,将这个元素从vector里删除会怎么样?我思考了下,认为那个元素会被删除,但是引用还是会指向原来的内存,也就是说这里可能会出现安全问题。光想是不行的,所以速度写了个小测试:
#include<iostream> #include<vector> class Test{ public: Test() { a = 1; } ~Test() { a = 5; } int a; }; int main() { std::vector<Test> vec; vec.push_back(Test()); Test &t = vec.back(); std::cout << t.a << std::endl; vec.pop_back(); std::cout << t.a << std::endl; return 0; }
输出如下:
1 5
是的,很明显,引用指向的元素被析构了。以前我是从没注意过这一块的,嗯,又发现了一个日常可能出错的地方。