Проблемы с неявным копированием класса шаблона - PullRequest
0 голосов
/ 17 апреля 2010

Проходя через мою программу в gdb, строка 108 возвращается обратно к вызывающей функции и не вызывает конструктор копирования в классе A, как (я думал) должен:

template <class S> class A{
    //etc...
    A( const A & old ){
        //do stuff...
    }
    //etc...
};

template <class T> class B{
    //etc...
    A<T> ReturnsAnA(){
        A<T> result;
        // do some stuff with result
        return result; //line 108
    }
    //etc...
};

Есть намеки? Я уже четыре часа бьюсь головой об стену об этом и, похоже, не могу понять, что здесь происходит.

1 Ответ

2 голосов
/ 17 апреля 2010

(Именовано) Оптимизация возвращаемого значения действует. Ваш конструктор копирования удаляется как оптимизация (это разрешено стандартом, хотя приводит к другому поведению).

См. Также Понимание оптимизации возвращаемого значения и возврата временных значений - C ++ .

(Шаблоны не имеют к этому никакого отношения.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...