Я играл со следующим фрагментом кода.file_string
возвращает временную строку, которая должна «жить» только до конца оператора.В Visual Studio 2008, когда вы используете pTempFolder
, он содержит мусор, как и ожидалось.Однако в Linux с компилятором Intel 11.0 pTempFolder
все еще указывает на допустимую строку.Есть ли у компиляторов разные политики в отношении уничтожения временных файлов, вроде нетерпеливый (Visual) и ленивый (Intel)?Или, может быть, это просто совпадение?
boost::filesystem wpathTempFolder("/tmp");
const wchar_t* const pTempFolder = wpathTempFolder.file_string().c_str();
// use pTempFolder
Кстати, это версия Boost для файловой системы 2. Я также видел, что file_string
не рекомендуется в версии 3 для файловой системы Boost.c_str
метод, который работает над строкой &, а не над временной строкой.
/*filesystem 2*/
const string_type file_string() const;
/*filesystem 3*/
const string_type& native() const; // native format, encoding
const value_type* c_str() const; // native().c_str()