Back to questions
Junior — Middle
88
Какие моменты необходимо учитывать при выбросе исключения внутри конструктора класса?
Answer from AI
sobes.tech AI
При выбросе исключения внутри конструктора класса в C++ важно учитывать следующие моменты:
- Если исключение выбрасывается, объект считается не созданным, и деструктор для него не вызывается.
- Все уже созданные члены объекта, которые были успешно инициализированы до исключения, будут корректно разрушены.
- Нужно быть осторожным с ресурсами, выделенными до выброса исключения, чтобы избежать утечек памяти.
- Рекомендуется использовать RAII (Resource Acquisition Is Initialization) — оборачивать ресурсы в объекты, которые сами управляют своей очисткой.
Пример:
class FileWrapper {
FILE* file;
public:
FileWrapper(const char* filename) {
file = fopen(filename, "r");
if (!file) {
throw std::runtime_error("Не удалось открыть файл");
}
}
~FileWrapper() {
if (file) fclose(file);
}
};
Здесь, если fopen не удастся, выбросится исключение, и объект не будет создан, при этом не будет утечки ресурсов.