Если я определю класс исключения
class Exception : public std::runtime_error
{
/*...*/
private:
std::exception_ptr next;
std::exception_ptr prev;
}
в котором я ссылаюсь на ожидающие исключения next
и новые брошенные исключения в то время как this
в ожидании prev
освобождается ли исключение после обработки исключения? Я спрашиваю, потому что когда-то слышал std::exception_ptr
реализован с точки зрения подсчета ссылок, который может привести к утечкам памяти, если есть циклы ссылок, как я создал в этом классе.
Причина, по которой я спрашиваю, состоит в том, что я однажды услышал, что
std::exception_ptr
реализуется с точки зрения подсчета ссылок […]
Не обязательно, но это может быть. Пункт 18.8.5 / 6 Стандарта C ++ 11 упоминает об этом в примечании:
[…]typedef unspecified exception_ptr;
6 [ Заметка: Реализация может использовать подсчитанный со ссылкой умный указатель как
exception_ptr
, —конец
нота ]
Поэтому вы можете не захотеть устанавливать циклы exception_ptr
,
Других решений пока нет …