Вот два классаразница между конструкторами с параметрами и без
class A
{
std::string s;
public:
A() { prn("A constructor"); }
A(std::string s) : s(s) { prn("A not empty constructor"); }
A(const A&) { prn("A copy constructor"); }
A& operator =(const A& a) { prn("A = operator"); return *this; }
void p() { prn("in A"); }
};
class B
{
public:
A a;
B(A aa) : a(aa) { prn("B constructor"); }
B() { prn("B default constructor"); }
};
Теперь следующий код работает правильно
B b(A("sa"));
b.a.p();
Печать:
А, не пустой конструктор
копия конструктора
B конструктор в A
Но если я использую конструктор без параметров происходит нечто странное
B b(A());
компилирует и бежать, но нет выхода (Нет Конструкторы не был вызван)
B b(A());
b.a.p(); // error here
Got компилировать ошибка. Итак, в чем разница между этими двумя конструкторами?
Вы не вызывали конструктора, хотя, возможно, вы и подумали. –
Я думаю, вы должны сделать, как A a; B b (a); который работает нормально, как ожидалось. то, что вы упомянули, это функция decl, а не object decl. – chinnagaja