例如,假设我有以下代码:
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/