конструктор копирования
От: Hellhang Россия  
Дата: 24.07.10 03:00
Оценка:
Здравствуйте, имеется следующий код

#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);


вместо того чтобы создавать объект и возвращать его как я сделал в примере выше. Вроде как это экономит ресурсы, т.к не используется конструктор копирования и деструктор.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.