我无法弄清楚如何push_back(const value_type& val)
正好作品,docs它说,大约val
是矢量推背澄清
val is Value to be copied (or moved) to the new element ...
怎么可以当它通过引用,采用
val
复制?该复制是否会调用
val
的复制构造函数?
以及这里发生了什么?
#include <iostream>
#include <vector>
using namespace std;
struct x
{
x(int v = 0) : v(v) {}
int v;
};
vector<vector<x>> parts;
void fillParts()
{
vector<x> values = { x(1), x(2), x(3) };
parts.push_back(values);
}
int main()
{
fillParts();
parts[0][0].v = -123;
cout << parts[0][0].v; // -123
return 0;
}
这个运行没有误差修改, 是parts[0]
是当地的载体values
或副本的参考? 如果它是一个引用,它不应该至少给出一些警告,说你访问和修改本地对象的释放堆栈?
使用复制构造函数复制值,''''vector'在执行'push_back'时复制'values'向量,所以在访问它们时它们不会被释放。局部变量'values'确实被释放,但是具有相同下层数据的复制向量存储在'parts'中。 –
@JavierMr是的,但'push_back'需要引用 - 那么它如何执行'values'向量的复制? – ampawd
@ampawd为什么不呢? '复制构造函数'一般参考,它完美地执行复制。 –