1

如果我定义一个异常类

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

其中我指的是挂起的异常next和新抛出的异常,而this在挂起时prev,异常被处理后是否会被释放?我问的原因是,我曾经听说它std::exception_ptr是根据引用计数实现的,如果我在这个类中产生了引用循环,这可能导致内存泄漏。

4

1 回答 1

1

我问的原因是,我曾经听说它std::exception_ptr是根据引用计数实现的 [...]

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

typedef unspecified exception_ptr;

[...]

6 [注意:实现可能使用引用计数智能指针作为exception_ptr. ——<em>尾注]

因此,您可能不想建立exception_ptr.

于 2013-06-04T11:06:59.943 回答