Здравствуйте, имеется следующий код
#include <iostream>
#include <string>
using namespace std;
class Test
{
public:
Test(string theName) : name(theName)
{
cout << "Constructor " << name << endl;
}
Test(const Test &obj)
{
name = obj.name;
cout << "Copy constructor " << name << endl;
}
~Test()
{
cout << "Destructor " << name << endl;
}
Test& operator =(const Test &obj)
{
cout << "Operator = " << name << endl;
return *this;
}
void show()
{
cout << "name : " << name << endl;
}
private:
string name;
};
Test func()
{
Test obj("test func");
return obj;
}
int main()
{
Test one = func();
one.show();
return 0;
}
В момент создания объекта one происходит вызов функции, в которой создается объект. Собственно в чем заключается вопрос, конструктор вызывается только для локального объекта в функции func(). но для объекта one конструктор копирования не вызывается,почему ? Вроде бы это называется "оптимизацией возвращаемого значения", но все равно до конца непонятно что именно происходит при создании объекта в главной функции main().
P.S На днях глядел книжку Брюса Эккеля, там был совет, если из функции возвращается объект по значению то лучше делать следующим образом:
return someObjec(lhs, rhs);
вместо того чтобы создавать объект и возвращать его как я сделал в примере выше. Вроде как это экономит ресурсы, т.к не используется конструктор копирования и деструктор.