Может кто-нибудь объяснить, как выход из этого кода:Как создаются временные объекты и каковы фактические операции, которые происходят?
deleting 0xbfc69f7c 3,7
deleting 0xbfc69f84 2,4
deleting 0xbfc69f8c 1,3
Почему не временные объекты деструктор вызывался, который был создан во время возвращения из перегруженного оператора +. Является ли объект фракции, созданный внутри функции +, и его временная копия одинакова, а деструктор вызывается только один раз, я думаю, это не должно быть так. Может ли кто-нибудь объяснить, какие операции происходят здесь.
Заранее благодарен!
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, вы правы, конечно, я набрал небрежно. исправлено сейчас –
Пожалуйста, объясните, что вы имеете в виду под его руководством? –