Скотт Мейерс говорит:
C ++ определяет, что объект, выданный как исключение, всегда копируется, и копирование выполняется конструктором копирования объекта.
Но в моем коде:
struct test
{
test() { cout << "constructor is called" << endl; }
test(const test&) { cout << "copy constructor is called" << endl; }
~test() { cout << "destructor is called" << endl; }
};
void fun()
{
throw test();
}
int main()
{
try {
fun();
}
catch (test& t1) { cout << "exception handler" << endl; }
}
Я не вижу вызываемого конструктора копирования объекта исключения.
Если я изменю catch
для получения объекта исключения по значению, то это будет, но, согласно цитате Мейерса, объект исключения должен быть скопирован, даже если он получен по ссылке.
Почему не вызывается конструктор копирования (даже если обработка исключений выполняется по ссылке)?