如何返回std文件流

时间:2011-07-15 11:15:13

标签: c++ g++ std

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

编辑:

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

这是我想要实现的目标。但由于警告,我正在寻找另一种方式。

提前致谢,
Gasim Gasimzada

3 个答案:

答案 0 :(得分:4)

使用智能指针,可能会起作用(或者较新的std::unique_ptr之一等)。

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

答案 1 :(得分:2)

在C ++中,0x流对象是可移动的,因此您实际上可以按值返回流对象:

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

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

答案 2 :(得分:-1)

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

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