Ошибка: использование удаленного конструктора по умолчанию функции С++ [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Ошибка: использование удаленного конструктора по умолчанию функции С++ [дубликат]

Сообщение Anonymous »

Я удалил конструктор по умолчанию из идентификатора класса, и у меня есть поле идентификатора в разделе «Пользователь». При вызове конструктора User я получаю сообщение об ошибке использования удаленной функции «ID::ID()». Почему?
Код:

Код: Выделить всё

class ID {
public:
ID() = delete;
};

class User {
ID id;

public:
User() = delete;
User(const ID& id) {
// Error handling for id
this->id = id;
}
};
Но это прекрасно компилируется:

Код: Выделить всё

User(const ID& id) : id(id) {}
Почему компилятор всегда вызывает этот список инициализации и просто игнорирует this->id = id;? (Я имею в виду не игнорировать, а просто вызывать значение по умолчанию при инициализации списка и ошибки, поэтому не продолжаю дальше)
Что, если, например, я хотел бы выполнить обработку ошибок перед установкой поля, которое просто уникальный для класса User, а не общая обработка ошибок в классе ID? Как мне этого добиться?

Подробнее здесь: https://stackoverflow.com/questions/786 ... structor-c

Вернуться в «C++»