如何返回STD文件流

how to return std file streams

本文关键字:STD 文件 返回 何返回      更新时间:2023-10-16

我正在为我的应用程序开发一个"文件系统"来处理文件操作,如列出、创建、删除文件和目录,以及获取文件数据。我想使用std::fstream,因为它比C文件处理程序更安全,更容易格式化。但是我不能从函数返回一个流对象(它没有副本c'tor),当我试图返回引用时,我得到一个警告(我不警告并不意味着那么多,但我正试图修复我的应用程序中每一个可能的警告,我做了所有这些直到现在):"警告:返回一个临时的引用"。我能做什么?如果有人遇到这种情况,并找到了更好的处理方法,请告诉我。

编辑:

std::ofstream &Filesystem::createFile(const String &str) {
   std::ofstream file(str);
   return file;
}

这就是我想要达到的。但由于警告,我正在寻找另一种方法。

提前感谢,
Gasim Gasimzada

使用智能指针,类似的东西可能会工作(或一个较新的std::unique_ptr,等)

std::auto_ptr<std::iostream> foo()
{
  return std::auto_ptr<std::iostream>(new fstream(...));
}

在c++中,流对象是可移动的,所以实际上你可以按值返回一个流对象:

// Perfectly valid C++0x
std::ofstream f()
{
    return std::ofstream("pwnies.txt");
}

Visual c++ 2010标准库实现包括可移动流,libc++也是如此。如果您需要针对不支持右值引用和可移动流的旧编译器/库实现,则不能这样做,但对于没有任何此类约束的新代码,这是一种方法。

您可以通过引用将fstream作为参数传递给函数。

fstream obj;
void Modify (fstream &obj) // no return, just pass by reference
{
 //...
}