If I define an exception class

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

in which I refer to pending exceptions by next and new thrown exceptions while this is pending by prev, do the exception get freed after the exception is handled? The reason I'm asking is, that I once heard that std::exception_ptr is implemented in terms of reference counting which can lead to memory leaks, if there are reference cicles as I produced in this class.

有帮助吗?

解决方案

The reason I'm asking is, that I once heard that std::exception_ptr is implemented in terms of reference counting [...]

Not necessarily, but it could be. Paragraph 18.8.5/6 of the C++11 Standard mentions this in a note:

typedef unspecified exception_ptr;

[...]

6 [ Note: An implementation might use a reference-counted smart pointer as exception_ptr. —end note ]

Therefore, you may not want to establish cycles of exception_ptr.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top