在C++中,何时自动为本地向量调用析构函数
In C++, when is destructor called automatically for local 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 循环中向量 small 的值,我很困惑,因为我认为向量 small 会在每个 for 循环中自动销毁。为什么大人物仍然可以获得正确的价值?
谢谢!
执行时:
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;
您还可以验证它们是否独立保存向量的数据。您可以打印保存数据的指针。
std::cout << (void*)big.back().data() << std::endl;
std::cout << (void*)small.data() << std::endl;
这是因为您使用了制作小向量副本的big.push_back(small);
,当小向量在循环结束时被破坏时,复制不受影响
std::vector<T>::push_back()
是基于 复制的。它创建参数的副本,在本例中为 small
,并将其存储在 big
中。
所以你看到的不是small
的元素,而是实际上big
。
相关文章:
- 变量没有改变?通过向量的函数调用
- 在c++中使用向量时,如何调用构造函数和析构函数
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 向量推回调用析构函数时调用析构函数
- 在具有向量的类构造函数中进行析构函数调用
- 使用并行参数向量调用元素向量的成员函数
- 在 c++ 中,如何使用向量调用派生类?
- 使用参数向量调用函数
- 从向量C 调用播放器统计信息
- C++ 向量:调用push_back时出错
- 在C++中,何时自动为本地向量调用析构函数
- 对shared_ptr的向量调用clear().内存会被释放吗
- 对向量调用.end()的复杂性是多少
- 从指针向量调用函数
- 对存储在boost::any中的向量调用vector::size()
- 试图使用指向函数的指针向量调用函数,但未能返回正确的值——这是我的编译器吗
- 在函数定义为main的类中,从函数指针的向量调用函数
- 为什么空向量调用值类型的默认构造函数?
- 从基类对象的指针向量调用派生类的唯一函数
- 从抽象类的指针向量调用函数