Конструктор копирования в конструкторе копирования. Почему нельзя вызвать?
Собственно вопрос в коде:
class a
{
public:
a() = default;
a(a &oth)
{
}
private:
int a_;
};
class b
{
public:
b() = default;
b(b &oth)
{
a_(oth.a_); // Почему не удается вызвать конструктор копирования здесь??
}
a a_;
};
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Для поля a_
конструктор уже вызван раньше, между скобками ) {
. Это не шутка, все поля класса конструируются до начала исполнения тела конструктора, b(b &oth) /* вот тут */ {
. А дважды вызывать конструктор нельзя - язык запрещает. Поместите в это место список инициализации:
b(b &oth) : a_(oth.a_) {}