Допустим, у меня есть этот код:
#include <iostream>
using namespace std;
class A{
public:
A() { cout << "In normal ctor\n"; }
A(const A& a) { cout << "In cpy ctor\n"; }
A(A&& a) { cout << "In move ctor\n"; }
~A() { cout << "In dtor\n"; }
};
A func(A a) {
return a;
}
void main(){
A a1;
A a2 = func(a1);
}
Вывод следующий:
In normal ctor
In cpy ctor
In move ctor
In dtor
In dtor
In dtor
Теперь мне трудно понять, что происходит внутри функции func.
Когда a1 отправляется в функцию, функция не получает его по ссылке, а скорее «создает» свою собственную версию a1, которая является «a».
Поэтому, когда функция завершается, объект "умирает" и уходит в деструктор.
Так почему же он не передается конструктору? (Предположим, что там действительно создан локальный объект)
Есть ли какое-либо копирование, которое происходит за кулисами?
Заранее спасибо!
In cpy ctor- person tkausl   schedule 12.02.2018but rather it "creates" it's own version, да, это называется копированием, и вы видите это вIn cpy ctor. - person freakish   schedule 12.02.2018In move ctor. - person freakish   schedule 12.02.2018