Я пытался следующую программу:Почему существует разница в вызове конструкторов при передаче по значению функции и передаче по значению другому конструктору?
#include <iostream>
using namespace std;
class Type{
int i;
public:
Type() {cout << "type constructor "<<endl;}
Type (const Type &) { cout << "type copy constructor called" << endl;}
};
class MyClass {
Type variable;
public:
MyClass(Type a) {
cout << "inside MyClass constructor "<<endl;
variable = a;
}
};
void fun (Type){
return;
}
int main(){
Type t;
cout <<"t created"<<endl;
MyClass tmp = MyClass(t);
cout<<"calling fun"<<endl;
fun(t);
}
Выход этого:
type constructor
t created
type copy constructor called
type constructor
inside MyClass constructor
calling fun
type copy constructor called
Я задаюсь вопросом, почему конструктор по умолчанию вызывается, когда я прохожу его MyClass
конструктор и почему конструктор копирования называется когда я передаю его fun()
?
BTW такой же бывает, когда я использую список инициализаторов.
[pedantic] 'variable' не является копией, инициализированной из' a' там, это прямая инициализация. – Barry