誰能解釋這段代碼的輸出是如何:如何創建臨時對象以及發生的實際操作是什麼?
deleting 0xbfc69f7c 3,7
deleting 0xbfc69f84 2,4
deleting 0xbfc69f8c 1,3
爲什麼不臨時對象的析構函數獲取調用它從重載+運算符返回過程中產生的。 Fraction對象是在+函數內部創建的,它的臨時副本是相同的,析構函數只被調用一次,我想這不應該是這種情況。任何人都可以解釋發生在這裏的實際操作。
在此先感謝!
class Fraction{
int num ;
int den ;
public:
Fraction(int x = 0 , int y = 0 ){ num = x ; den = y ; }
Fraction(const Fraction & f){
cout<<"Copy Constructor for "<<f.num<<" , "<<f.den<<endl ;
num = f.num ;
den = f.den ;
}
Fraction operator+(const Fraction& f) const{
int x = f.num + num ;
int y = f.den + den ;
return Fraction(x,y) ;
}
~Fraction(){
cout<<"deleting "<<this<<" "<<num<<","<<den<<endl ;
}
};
int main() {
Fraction f1(1,3);
Fraction f2(2, 4);
Fraction f3 = f1 + f2 ;
return 0;
}
不,複製構造函數用於初始化'f3'對象,但是它是[* elided *](https://en.wikipedia.org/wiki/Copy_elision)。 –
@JoachimPileborg你是對的,當然,我打亂了。現在就修好了 –
請你解釋一下,你的意思是什麼? –