throw и количество создаваемых объектов
От: JohnDoe  
Дата: 11.10.06 08:01
Оценка:
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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.