Czy ogólnie konstruktorzy ruchów mogą rzucać? Tak. Czy powinny one być? Nie.
Zasadniczo nic w nich nie powinno być czymś, co mogłoby rzucić. Nie powinieneś przydzielać pamięci, wywoływać innego kodu ani niczego w tym stylu. Jedynym powodem do napisania konstruktora ruchu jest odejście od cudzych wskaźników pamięci i odniesień do obiektów. Powinieneś kopiować kilka podstawowych typów i usuwać wartości z drugiego obiektu. Te rzeczy nie powinny rzucać.
Tak więc, o ile jest to dozwolone, nie jest to dobry pomysł. Jeśli to robisz, przemyśl to, co robisz w operacjach przenoszenia.
Nic nie widziałem w standardzie, że konstruktory move nie mogą rzutować, ale widziałem, że "Domyślnie deklarowany konstruktor ruchu dla klasy X będzie miał postać ' X :: X (X &&) ' ", i nie widzę tam" noexcept ". –
W ostatecznej wersji roboczej nie widzę opcji "noexcept" zadeklarowanej dla dowolnej funkcji ... – ronag
@ronag: Czy na pewno szukasz? Ponieważ otworzyłem N3337 i właśnie szukałem "' noexcept'' i natychmiast uzyskałem funkcję 'swap 'jakiejś klasy. –