2012-07-03 32 views
2

我有一個函數,看起來是這樣的,它由movesemantics返回不可複製類:析構函數布展構造函數之前叫什麼名字?

MyClass&& MyFunction() { 
    MyClass myClass; 
    do some stuff; 
    return std::move(myClass); 
} 

然後它是由

main() { 
    MyClass myClass = MyFunction(); 
} 

類利用boost::noncopyable爲copyprevention訪問。它有構造函數,移動構造函數和移動賦值。 我的問題是,析構函數獲取移動構造函數之前調用。我做錯了什麼?

回答

4

您正在返回一個局部變量的引用。無論它是左值引用還是右值引用都沒關係。

你或許應該只是做

MyClass MyFunction() { 
  MyClass myClass; 
  do some stuff; 
  return myClass; 
} 

,讓編譯器計算出如何複製或移動的結果。

+0

我想你明確地返回右值。 –

+0

是的,這是預期的早。後來發現這不完全正確。看[想要速度?通過值傳遞](http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/)。 –

+1

在這種情況下,編譯器總是會移動'myClass'。 – Puppy

相關問題