Исключение в деструкторе
От: Xchllataa  
Дата: 13.11.07 14:05
Оценка: :)
Здравствуйте

Для удобства в формировании сообщений при генерации исключений, написал следующий код
#include <iostream>
#include <sstream>
#include <stdexcept>

class Throw
{
public:
    Throw()
    {
    }

    ~Throw()
    {
        // Здесь предполагается выводить stream.str() в лог

        // C4722 'Throw::~Throw' : destructor never returns, potential memory leak
        throw std::runtime_error(stream.str());
    }

    operator std::ostream&() {return stream;}

private:
    std::ostringstream stream;

    Throw(Throw const&);
    Throw const& operator=(Throw const&);
};

// suppress C4127
inline bool false_() {return false;}

#define DBG_THROW() if (false_()) ; else static_cast<std::ostream&>(Throw()) << '[' << __FUNCTION__ << "] "

int main()
{
    try
    {
        DBG_THROW() << "test " << 42;
    }
    catch (std::exception const& e)
    {
        std::cout << e.what() << std::endl;
    }

    return 0;
}

Код работает, как ожидалось, но при компиляции в Release выдаётся следующее сообщение

warning C4722: 'Throw::~Throw' : destructor never returns, potential memory leak

Насколько в данном случае это опасно? Вроде при работе Throw::~Throw() все нужные деструкторы вызываются.

З.Ы.
Я знаю, что если Throw::~Throw() был вызван в результате другого исключение, то приложение упадёт, но здесь это вроде не проблема
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.