Я предполагаю, что у CPLAT есть базовый класс? Я также предполагаю, что вы не поместили спецификатор throw в деструктор CPLAT?
Вы можете поставить throw(X)
(где X - список исключений через запятую) в конце сигнатуры функции, чтобы указать, какие исключения разрешено создавать. Если вы укажете throw()
в качестве спецификатора throw, то это будет означать, что из этой функции не могут быть сгенерированы исключения. Это довольно распространено делать с деструкторами, так как вы никогда не хотите, чтобы деструктор генерировал исключение.
Класс, который переопределяет функцию, имеющую спецификатор throw, не может иметь более слабый спецификатор throw (перечислить больше исключений), чем переопределяемая функция, поскольку это указывает на то, что функция производного класса может нарушать спецификатор throw базового класса. функция. Отсутствие спецификатора throw означает, что любое исключение может быть выброшено из этой функции, поэтому оно настолько свободно, насколько это возможно.
По всей вероятности, вам нужно добавить throw()
в конец сигнатуры функции деструктора CPLAT.
Редактировать: Кстати, я, вероятно, должен добавить, что вы, вероятно, не хотите использовать спецификаторы броска (кроме throw()
для деструкторов), даже не зная, что это именно то, что вам нужно. В отличие от проверенных исключений Java, они не перехватываются во время компиляции, а скорее завершают работу вашей программы в случае нарушения. Поэтому лучше их не использовать, если вы не знаете, что делаете.