Вопрос по C++ Заголовочный файл #ifndef __symbol_scalar_hxx #define __symbol_scalar_hxx #include "symbol.hxx" #include "pyxis_lexer.hxx" #include <string> namespace engine_stuff { struct symbol_scalar_exception { enum symbol_scalar_exception_type { undefined_variable } type; symbol_scalar_exception (symbol_scalar_exception_type t): type (t) {} }; class symbol_scalar: public symbol { public: enum symbol_scalar_type { undef_scalar, bool_scalar, double_scalar, string_scalar }; private: std::string name; symbol_scalar_type type; bool bool_value; double double_value; std::string string_value; public: symbol_scalar (std::string & n); bool operator == (const symbol_scalar & symb) const; long hfunc (); void set_type (symbol_scalar_type t); void set_value (bool bool_val); void set_value (double double_val); void set_value (std::string & string_val); const symbol_scalar_type & get_type (); const bool & get_bool_value (); const double & get_double_value (); const std::string & get_string_value (); }; }; #endif // __symbol_scalar_hxx Реализация функции get_string_value: const std::string & engine_stuff::symbol_scalar::get_string_value () { switch (type) { case undef_scalar: throw symbol_scalar_exception (symbol_scalar_exception::undefined_variable); case bool_scalar: string_value = bool_value ? "true" : "false"; break; case double_scalar: char tmp[100]; { std::strstream string_value_stream (tmp, sizeof (tmp), std::ios::in | std::ios::out); string_value_stream << double_value; string_value_stream >> string_value; } break; case string_scalar: break; } return string_value; } Блок { std::strstream string_value_stream (tmp, sizeof (tmp), std::ios::in | std::ios::out); string_value_stream << double_value; string_value_stream >> string_value; } пришлось заключить в фигурные скобки, т.к. g++-3.0 не захотел компилить (поcкольку для string_value_stream в конце блока switch генерируется деструктор, но при переходе на case string_scalar объект string_value_stream не будет создан. Теперь непосредственно вопрос, почему захотело компилиться так: case double_scalar: char tmp[100]; std::strstream string_value_stream (tmp, sizeof (tmp), std::ios::in | std::ios::out); string_value_stream << double_value; string_value_stream >> string_value; string_value_stream.~strstream (); break; Здесь я явно вызываю деструктор... Не понимаю... P. S. Просьба не судить строго, C++ знаю не очень хорошо (пока :) )