我無法弄清楚如何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爲什麼不呢? '複製構造函數'一般參考,它完美地執行復制。 –