Я работал над реализацией, вдохновленной выступлением Андрея Александреску об обработке ошибок в C ++ .
Я хочу знать, как обрабатывать std :: exception_ptr в конструкторах копирования / перемещения ичто происходит с действительным объектом исключения, на который есть ссылка?
Должен ли я реализовать копирование и перемещение для exception_ptr?
Копирование: Копирование необходимо для передачи исключения_птр в функции, которыебудет обрабатывать исключение.
Move: Так как exception_ptr похож на shared_ptr, имеет ли смысл его перемещать? или необходимо обеспечить перемещение, чтобы предотвратить увеличение / уменьшение счетчика ссылок?
Если я их реализую, каково должно быть состояние исключения_ptr?
Когда яскопируйте exception_ptr, в другой, оба они ссылаются на один и тот же объект исключения, что нормально.
Однако, когда я перемещаю exception_ptr, я должен установить ptr, который перемещен, в null? Что делать, если я не установил перемещенный ptr в ноль, и что это значит для следующего утверждения из здесь .
Объект исключения, на который ссылается std :: exception_ptr, остается действительным до тех пор, пока остается хотя бы один std :: exception_ptr, который ссылается на него: std :: exception_ptr является интеллектуальным указателем общего владения (примечание: это в дополнение к обычным правилам времени жизни объекта исключения)