Re: RFC: Польза от деструкторов локальных переменных
От: Аноним  
Дата: 20.07.07 11:07
Оценка:
НМВ>
НМВ>    //postfix ++
НМВ>    const foo operator++(int)
НМВ>    {
НМВ>      deferred_increment inc(*this);
НМВ>      return *this;                 
НМВ>              // увеличили  *this  в деструкторе
НМВ>              // ни одной временной переменной не надо
НМВ>    }
НМВ>};
НМВ>


НМВ>Если так можно (т.е. безопасно) делать, то почему так никто не делает?


А зачем? В чем собственно заключается оптимизация? deferred_increment имеет размер sizeof(master_type&). Т.е. тот же временный объект создаваемый на стеке.

НМВ>Ещё брутальнее: безопасный по исключениям stack::pop(), возвращающий значение


НМВ>
НМВ>    value_type vpop()
НМВ>    {
НМВ>      deferred_pop p(*this) 
НМВ>      return top();    
НМВ>      // вызов деструктора p
НМВ>    }
НМВ>    /*...*/
НМВ>  };

НМВ>


А в чем суть этого кода? Насколько я понимаю top() не бросает исключений, он и так безопасен. А в деструкторе deferred_pop вызывается pop(), который может бросить исключение и нигде в деструкторе они не обрабатываются!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.