下面的程序崩潰,並segmention故障:段故障時的std ::矢量
#include <iostream>
#include <vector>
using namespace std;
struct data
{
data() : a(random()), b(random()), v({random(), random(), random()}) {}
data(data&& m) noexcept : a(m.a), b(m.b), v(std::move(m.v)) { }
long int a;
long int b;
std::vector<long int> v;
};
data&& randomize()
{
srandom(time(0));
data d;
d.a = random();
return std::move(d);
}
int main(int argc, char** argv)
{
data d = randomize();
cout << d.a << " " << d.b << endl;
return 0;
}
的代碼被編譯以克++版本4.7.2(Debian的4.7.2-5):
g++ -std=c++11 -g test.cpp
我做錯了什麼?這個問題似乎是在std :: vector移動構造函數,導致一切正常工作沒有它。看起來來自randomize()的數據對象在函數完成時會被銷燬,但不應該將它移動到主數據對象中嗎?
請注意,這裏不需要返回* rvalue *引用(即使它有效返回對本地自動變量的引用)。如果可能的話,函數返回值總是被移動。 –