Я столкнулся с ситуацией с некоторым унаследованным кодом ... честно говоря, я считаю, что код написан правильно, но эта ошибка все еще проявляется.
Я быстро отмечу, что код кросс-компилируется из Linux в LynxOS, я не уверен, может ли это иметь какое-либо отношение к ошибке.
В основном, в одном конкретном случае:
try {
std::vector<ClassA> x = SomeGeneratingFunction();
//We get to here fine. X may be empty/unpopulated though.
if (x.size() < 1)
{
throw(MyException("It crashed."));
}
}
catch (MyException e)
{
//Handle it.
}
catch (...)
{
//Handle it.
}
Мы бросаем, учитывая, что вектор не заселен, но по какой-то причине бросок обходит предложения catch - оба из них. Кажется, что это происходит здесь - хотя мы обычно не формируем область действия оператора if, но это не должно иметь никакого значения, так как она все еще находится в области действия try.
PS: приведенный ниже код фактически является содержимым функции, и исключения вызываются из функции при вызове, даже если они должны обрабатываться блоками catch.
Есть идеи, как это возможно? И да, это не настоящие классы кода / исключения, но класс исключения - это простой пример, по которому Google перегружает std :: exception, а SomeGeneratingFunction () возвращает хороший вектор, даже если он пустой. Я не могу предоставить реальный код, но это очень близко, за исключением каких-либо мелких опечаток, которые я, возможно, сделал, написав его на макушке моей головы.