从大于 1 的深度传递返回的右值引用时,我遇到了问题。
struct Data {
std :: vector <int> data;
Data () {
data .push_back (1);
};
Data (Data && d)
: data (std :: move (d .data))
{}
};
Data && foo () {
Data d;
return std :: move (d);
}
Data && bar () {
return std :: move (foo ()); // Crashes in autogenerated code
}
Data && baz () {
return foo (); // Crashes in Data move constructor.
}
Data && bop () {
Data d = foo ();
return std :: move (d); // Crashes in autogenerated code.
}
int main () {
Data d_foo = foo (); // This is fine.
Data d_bar = bar (); // Crash.
Data d_bar = baz (); // Crash.
Data d_bop = bop (); // Crash.
}
我认为 std::vector 正在被双重释放。我正在使用 g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
上面的代码对你有用吗?我做错了什么还是库或编译器中有错误?
如果(天堂原谅)它是编译器(gcc 中还有其他已知的 C++0x 错误),有人可以告诉我是否有一种安全的方式来升级或修补 ubuntu 上的 gcc?我以前尝试过,但陷入了一堆不受支持的包中。
非常感谢。