c++ - 在 C++ 中,什么时候为局部 vector 自动调用析构函数?

标签 c++ vector

例如,假设我有以下代码:

vector<vector<int>> big;
for (int i=0;i<3;++i){
    vector<int> small;
    small.push_back(3*i+1);
    small.push_back(3*i+2);
    small.push_back(3*i+3);
    big.push_back(small);
}
for (vector<int> s:big){
    for (int a:s){cout<<a<<" ";}
    cout<<endl;
}

cout 给出的结果是 big 包含每个 for 循环中 vector small 的值,我很困惑,因为我认为 vector small 会在每个 for 循环中自动销毁。 为什么 big 仍然可以访问正确的值?

谢谢!

最佳答案

当你执行时:

big.push_back(small);

small 的拷贝被添加到 big。您可以通过执行以下命令来验证它们是两个不同的对象:

std::cout << (void*)&big.back() << std::endl;  // big.back() returns a reference to the copy.
std::cout << (void*)&small << std::endl;

您还可以验证它们是否独立保存 vector 的数据。您可以打印保存数据的指针。

std::cout << (void*)big.back().data() << std::endl;
std::cout << (void*)small.data() << std::endl;

关于c++ - 在 C++ 中,什么时候为局部 vector 自动调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34781658/

相关文章:

c++ - 如何在光线追踪器中移动相机?

c++ - 此 C++ 代码示例中是否存在关于指针的内存泄漏?

C++ long double bigger "safe"整数

c++ - 作为类成员管理指针 vector

r - 在 R 中的两个向量列表之间执行运算

c++ - 模板的模板的参数类型推导规则是什么?

c++ - 这种 rebind_alloc 的使用是错误的吗?

c++ - 如何将一维数组更改为二维 vector ?

c++ - C++中 vector 的 HashMap

c++ - 我正在尝试为 Kruskal 算法实现一个 C++ 程序,它要求我按权重对图形进行排序。如何按权重对我的结构进行排序