gpt4 book ai didi

c++ - 关于销毁临时文件的编译器策略

转载 作者:搜寻专家 更新时间:2023-10-31 00:03:39 25 4
gpt4 key购买 nike

我一直在研究以下代码。 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 在 boost 文件系统版本 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()

最佳答案

很可能,该字符串仍然无效,恰好那部分内存尚未在操作系统级别取消分配,它“恰好”可以工作。该程序表现出未定义的行为 - 始终包括“可能会继续工作,就好像没有出错一样”。 Visual Studio 在这里完全正确地使您的程序或几乎任何东西崩溃。

关于c++ - 关于销毁临时文件的编译器策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5632714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com