1
我試圖爲聚合ostringstream
的類創建一個移動構造函數。不過,我一直運行到g ++ 4.4:iostream移動語義
/usr/include/c++/4.4.5/bits/ios_base.h:790: error:
‘std::ios_base::ios_base(const std::ios_base&)’ is private
這是我能想出
struct C {
C(){ s << "start! "; }
C(C&& c): s(std::move(c.s)){ s << " moved "; }
std::ostringstream s;
private:
C(const C&);
};
C f() { return C(); }
int main(){
C c=f();
c.s << "aha";
std::cout << c.s.str() << std::endl;
}
最簡單的代碼是Iostreams庫旨在實現移動語義?還是僅僅是g ++ 4.4.5還不支持它們呢?
移動語義只能作爲複製的優化。如果不可複製的類可以移動,就會像舊的unique_ptr一樣造成混淆。如果您需要使用智能指針,請使用智能指針 – Dani 2012-03-21 10:30:01
Dani,事實並非如此,有很多不可複製的類型可移動,而不僅僅是優化,例如, 'std :: unique_lock','std :: unique_ptr'(你引用的「old unique_ptr」是'std :: auto_ptr',這很令人困惑,但它早於語義),並且在問題中,'std :: ostringstream'。 Iostreams將在GCC 5.0版本中移動。 – 2014-09-22 13:22:06