Можно ли создать утечку памяти с помощью std::exception_ptr

Если я определю класс исключения

class Exception : public std::runtime_error
{
/*...*/
private:
    std::exception_ptr next;
    std::exception_ptr prev;
}

в котором я ссылаюсь на ожидающие исключения next и новые брошенные исключения в то время как this в ожидании prevосвобождается ли исключение после обработки исключения? Я спрашиваю, потому что когда-то слышал std::exception_ptr реализован с точки зрения подсчета ссылок, который может привести к утечкам памяти, если есть циклы ссылок, как я создал в этом классе.

1 ответ

Решение

Причина, по которой я спрашиваю, состоит в том, что я однажды услышал, что std::exception_ptr реализуется с точки зрения подсчета ссылок [...]

Не обязательно, но это может быть. Пункт 18.8.5/6 Стандарта C++11 упоминает об этом в примечании:

typedef unspecified exception_ptr;

[...]

6 [ Примечание: реализация может использовать умный указатель с подсчетом ссылок как exception_ptr, -конец примечания ]

Поэтому вы можете не захотеть устанавливать циклы exception_ptr,

Другие вопросы по тегам