引用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

  是的,很明显,引用指向的元素被析构了。以前我是从没注意过这一块的,嗯,又发现了一个日常可能出错的地方。

原文地址:https://www.cnblogs.com/RookieSuperman/p/11257533.html