struct a_t
{
//a_t(){}
//a_t(const a_t& other){}
~a_t()
{
cout << "dtor" << endl;
}
};
Вызов:
try
{
throw a_t();
}
catch(a_t&){}
Получаем
dtor
dtor
Т.е. был создано 2 экземпляра a_t.
Если же раскоментарить дефолтный и копирующий конструкторы, то получим только один вызов деструктора, т.е. был создан всего один объект. Насколько я понимаю, при отсутсвии определенного дефолтного и копирующего конструкторов компилятор должен был создать их сам и количество созданных объектов должно было равняться 1 в обоих случаях. Или оптимизация при выбросе исключений зависит от реализации оной компилятором? Есть ли гарантии на количество создаваемых временных объектов при выбросе исключения?
VC++2002, VC++2005