Я слышал некоторое время назад, что я не должен создавать классы исключений, у которых были бы поля типа std::string
. Об этом говорит сайт Boost. Обоснование заключается в том, что конструктор std::string
copy может генерировать исключение, если распределение памяти не выполняется, и если исключение вызывается до того, как пойманное обработанное исключение будет поймано, программа прекращается.
Однако, он все еще держится в мире конструкторов перемещения? Не будет ли использоваться конструктор перемещения вместо конструктора копирования при выбросе исключения? Правильно ли я понимаю, что с С++ 11 не будет выделено выделение памяти, нет никаких шансов на исключение, а std::string
теперь абсолютно нормально в классах классов?