Стандарты программирования на С++



         

Исключения


Если вы перекрываете виртуальную функцию базового класса, которая уже имеет спецификацию исключений, и у вас нет возможности внести изменения в базовый класс и убрать спецификации исключений (или убедить сделать это автора класса), то вы должны использовать совместимую спецификацию исключений в вашей перекрывающей функции, причем следует сделать ее не менее ограничивающей, чем в базовой версии, чтобы минимизировать возможность нарушений спецификации исключений:

class Base { //... // В чужом классе имеется virtual f() // спецификация исключений, throw(X, Y, Z); // и если вы не можете }; // ее удалить...

class MyDerived : public Base { //... // ... то в вашем классе при virtual f() // перегрузке функции она должна throw(X, Y, Z); // иметь совместимую (желательно }; // идентичную) спецификацию исключений

Из опыта [BoostLRG] следует, что только пустые спецификации исключений (т.е. throw()) у невстраиваемых функций "могут давать некоторое преимущество у некоторых компиляторов". Не слишком оптимистичное заявление для одного из наиболее продвинутых, разрабатываемого экспертами мирового уровня проекта...




Содержание  Назад  Вперед