是否可以使用std :: exception_ptr创建内存泄漏

时间:2013-06-04 10:44:40

标签: c++ c++11 exception-handling nested-exceptions

如果我定义了一个异常类

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

其中我引用next的待处理异常以及this等待prev时新的抛出异常,处理异常后是否释放异常?我问的原因是,我曾经听说std::exception_ptr是在引用计数方面实现的,这可能会导致内存泄漏,如果我在这个类中产生了引用cicles。

1 个答案:

答案 0 :(得分:1)

  

我问的原因是,我曾经听说std::exception_ptr是在引用计数方面实施的[...]

不一定,但也可能。 C ++ 11标准的第18.8.5 / 6段在一个注释中提到了这一点:

typedef unspecified exception_ptr;
     

[...]

     

6 [注意:实现可能会将引用计数的智能指针用作exception_ptr。 - 端   注意]

因此,您可能不希望建立exception_ptr

的周期