作者mathan (None)
看板Programming
標題[問題] C++從函數返回一個區域物件時constructor的被呼叫時機
時間Sat May 16 17:30:54 2009
對於下列的程式
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
1F:→ akasan:可能會被呼叫 也有可能不會218.165.171.114 05/16 17:46
2F:→ akasan:完全看compiler實作與最佳化程度了218.165.171.114 05/16 17:46
3F:→ akasan:google it -> NRV optimize218.165.171.114 05/16 17:47
4F:→ th19883617:就我所知 若不是用pointer或refernce 140.113.249.9 05/16 21:07
5F:→ th19883617:他會呼叫class預設複製建構子 140.113.249.9 05/16 21:07
6F:→ adrianshum:另,7 的 c 該在 f() 完結被 destruct 220.246.198.75 05/17 21:10
7F:→ adrianshum:不過 NRV 的情況該還會再遲一點點 220.246.198.75 05/17 21:10