[問題] C++從函數返回一個區域物件時constructor的被呼叫時機

看板Programming作者 (None)時間16年前 (2009/05/16 17:30), 編輯推噓0(007)
留言7則, 3人參與, 最新討論串1/1
對於下列的程式 1 //宣告class C 2 class C{ 3 ... 4 }; 5 //f函數 6 C f(){ 7 C c; 8 return c; 9 } 10 11 int main(int argc, char **argv){ 12 C c1=f(); 13 return 0; 14 } 請問一下 第8行的return敘述會導致新的C物件額外產生嗎?因此C的constructor再被再呼叫? 第7行宣告的c它的 destructor會何時被呼叫(a.)離開f()時 (b.)還是離開main時 感謝回覆 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.232.241.63

05/16 17:46, , 1F
可能會被呼叫 也有可能不會
05/16 17:46, 1F

05/16 17:46, , 2F
完全看compiler實作與最佳化程度了
05/16 17:46, 2F

05/16 17:47, , 3F
google it -> NRV optimize
05/16 17:47, 3F

05/16 21:07, , 4F
就我所知 若不是用pointer或refernce
05/16 21:07, 4F

05/16 21:07, , 5F
他會呼叫class預設複製建構子
05/16 21:07, 5F

05/17 21:10, , 6F
另,7 的 c 該在 f() 完結被 destruct
05/17 21:10, 6F

05/17 21:10, , 7F
不過 NRV 的情況該還會再遲一點點
05/17 21:10, 7F
文章代碼(AID): #1A3eVFQT (Programming)