在 C++ 中,我有一些函数需要写入临时目录。理想情况下,只创建一个它们都写入的临时目录(以最小化 I/O 开销)。该目录应在程序退出时自动删除。
但是,我不想在主函数中处理临时目录的创建和删除,因为我认为只有实际使用该目录的函数才应该负责它的创建和删除。并且 main 函数并不一定知道使用了一个临时目录。
这是我尝试过的(参见下面的代码): 可以从任何地方全局调用的 getTempDir() 函数仅在第一次调用时创建一个目录,并在每次调用时返回目录名称。在第一次调用时,它还会为一个小 DirRemover 对象创建一个静态 boost::shared_ptr,该对象的析构函数将删除目录。程序退出时会自动调用该析构函数。
问题是它不会在程序不成功退出或杀死等时调用 FileRemover 析构函数。有更好的解决方案吗?
这是代码:
std::string getTempDir(){
static bool alreadyThere = false;
static std::string name = "";
if(!alreadyThere){
// create dir with
// popen("mktemp -p /tmp","r"))
// and store its name in 'name'
removeAtEnd(name);
alreadyThere = true;
}
return name;
}
void removeAtEnd(const std::string& name){
static boost::shared_ptr<DirRemover> remover(new DirRemover(name));
}
struct DirRemover {
std::string name;
DirRemover(const std::string& n) : name(n){}
~DirRemover(){
// remove 'name' dir with popen("rm -r ...")
}
};