Войти
ПрограммированиеФорумОбщее

C++, семантика перемещения для возращаемого значения (3 стр)

Страницы: 1 2 3
#30
13:41, 11 апр. 2016

Ravager
Будет терминейт с 11ого стандарта, если кинешь в деструкторе. в 98ом стандарте, можно даже словить эксепшен этот.
http://cpp.sh/5dcko Вот пример, в 98ом в кетч попадёшь (хотя это всё UB), в последующих стандартах будет терминейт.


#31
13:44, 11 апр. 2016

MATov
таки да, ловил даже. хорошо что теперь терминейт

#32
14:21, 11 апр. 2016

Ravager
> кажется вместе с первым стандартом были
Когда кажется, креститься надо.

#33
14:40, 11 апр. 2016

TarasB

include <iostream>
class A
{
public:
  ~A()
  {
    throw 2;
  }
};

int main()
{
  try
  {
    A a;
  }
  catch(...)
  {
  }
  std::cout << "It's ok" << std::endl;
  return 0;
}
root@wks:~# g++ main.cpp
root@wks:~# ./a.out
It's ok
root@wks:~#
#34
15:36, 11 апр. 2016

Ravager
В С++ то, что что-то прокатило, ещё не значит, что это можно.

#35
15:52, 11 апр. 2016

TarasB
хорошая отмаза. тем не менее стандартом это не запрещено. ну а если у тебя выкинется еще одно исключение в процессе раскрутки стека - сам дурак.

#36
15:54, 11 апр. 2016

Ravager
> все что не запрещено - разрешено
Возвращать ссылку на локальную переменную - разрешено?

Короче, в любом случае деструкторы не надо помечать как "носру".

#37
15:55, 11 апр. 2016

TarasB
> Возвращать ссылку на локальную переменную - разрешено?
разрешно, только это undefined behaviour

Страницы: 1 2 3
ПрограммированиеФорумОбщее

Тема в архиве.