我正在为我的应用程序开发一个“文件系统”来处理文件操作,例如列出,创建,删除文件和目录,以及获取文件数据。我想使用std :: fstream,因为它比C FILE Handler更安全,更容易格式化。但我不能从函数返回一个流对象(它没有复制c'tor),当我试图返回引用时,我收到警告(我没有警告并不意味着那么多,但我正在尝试在我的应用程序中修复所有可能的警告,直到现在我都做了所有这些警告:“警告:返回对临时的引用”。我能做什么?如果有人遇到这种情况并找到了更好的处理方法,请告诉我们。
编辑:
std::ofstream &Filesystem::createFile(const String &str) {
std::ofstream file(str);
return file;
}
这是我想要实现的目标。但由于警告,我正在寻找另一种方式。
提前致谢,
Gasim Gasimzada
答案 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
{
//...
}