Вопрос по 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++ знаю не очень хорошо (пока :) )
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Помогите с std::function (2023)
- Форум [c++] Оптимизация кода работы с байтами (2011)
- Форум Шаблоны, почему не работает? (2017)
- Форум Валится на throw (2005)
- Форум Помогите с boost::spirit (2008)
- Форум does not name a type... (2013)
- Форум shared_ptr и union (2015)
- Форум Цикл имени Rammstein. меня порвало на части.. (2007)
- Форум проблемы с std::variant of lambda (2020)
- Форум Вопрос по шаблонам функций-членов в С++ (2005)