Вызов конструктора в операторе return

class test{

public:

    int data;
    test(const test& ){cout<<"INSIDE COPY CON "<<endl;}
    test(int val = 0) : data(val){ cout<<"INSIDE CON "<<endl; }

    test testfun(const test& obj)
    {
        cout<<"data : "<<data<<endl;
        //test test3(this->data + obj.data);
        //cout<<"test3 :"<<test3.data<<endl;
        //return test3;   //This will work only if return type is changed to const ref
        return test(data + obj.data); 


    }
};

int main()
{

    test testO1(1);
    test testO2(2);
    test testO3 = testO1.testfun(testO2);

    cout<<testO3.data<<endl;


    getchar();


}

ВЫВОД:

INSIDE CON

INSIDE CON

data : 1

INSIDE CON

3

Что происходит, когда конструктор вызывается в операторе return? Поскольку я могу вернуться по значению, и это работает, я думаю, что это не временное местоположение. ИЛИ он создает объект как временный и использует конструктор копирования для копирования значений, в этом случае почему печать внутри конструктора копирования не печатается.

5
задан Oliver Charlesworth 8 June 2012 в 00:36
поделиться