关于破坏临时工作者的编制政策

rtu*_*ado 2 c++ compiler-construction intel visual-studio-2008

我一直在玩下面这段代码.file_string返回一个临时字符串,该字符串只能"生效"直到语句结束.在Visual Studio 2008中,当您使用时pTempFolder,它会按预期包含垃圾.但是在Linux中,使用英特尔编译器11.0 pTempFolder仍然指向一个有效的字符串.编译器是否有关于临时销毁的不同政策,那种渴望(视觉)与懒惰(英特尔)?或许这只是一个巧合?

boost::filesystem wpathTempFolder("/tmp");
const wchar_t* const pTempFolder = wpathTempFolder.file_string().c_str();
// use pTempFolder
Run Code Online (Sandbox Code Playgroud)

顺便说一下,这是boost文件系统版本2.我也看到file_string在升级文件系统版本3 中已经被弃用.并且有一种新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()
Run Code Online (Sandbox Code Playgroud)

Pup*_*ppy 5

可能,字符串仍然无效,只是在操作系统级别尚未取消分配该部分内存并且它"正好"工作.该程序展示了未定义的行为 - 它总是包括"可以继续工作,好像什么都没有出错".Visual Studio在这里完全正确,可以使您的程序崩溃或几乎任何事情.