|
|
От: | 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;
}Насколько в данном случае это опасно? Вроде при работе Throw::~Throw() все нужные деструкторы вызываются.warning C4722: 'Throw::~Throw' : destructor never returns, potential memory leak