我写了一段代码,根据用户设置的布尔值写入控制台或文件。
代码看起来像这样。
#include <iostream>
#include <fstream>
int main()
{
bool bDump;
std::cout<<"bDump bool"<<std::endl;
std::cin>>bDump;
std::ostream* osPtr;
std::ofstream files;
if(bDump)
{
files.open("dump.txt");
osPtr = &files;
}
else
{
osPtr = &std::cout;
}
std::ostream& stream = *osPtr;
stream<<"hello";
if(bDump)
{
files.close();
}
return 0;
}
这里我创建了一个std :: ostream指针,并根据布尔值我正在分配一个ofstream对象或std :: cout的地址。我唯一担心的是打开还是关闭等文件操作是否正确完成。因为我是c ++的新手,请帮助我。还要指出这里是否有任何糟糕的编程习惯。
答案 0 :(得分:4)
它的正确和有效。
我不同的主要做法是not to explicitly call close(),因为这是由析构函数自动完成的。
您可以使用三元运算符稍微简化代码(并删除指针);
#include <iostream>
#include <fstream>
int main()
{
bool bDump;
std::cout << "bDump bool"<<std::endl;
std::cin >> bDump;
std::ofstream files;
std::ostream& stream = (bDump) ? (files.open("dump.txt"), files)
: std::cout;
stream<<"hello";
}
答案 1 :(得分:0)
没有潜在的泄漏。但是,如果
引发异常stream<<"hello";
然后
files.close();
永远不会调用,但是对于您的特定代码示例,没有任何问题。 ofstream的析构函数碰巧为你调用close()。
答案 2 :(得分:0)
你做得很好,但最后不需要close()
,因为在C ++中我们依靠析构函数为我们清理,std::ofstream
有一个自动关闭文件的文件
您还可以省略C ++中return 0;
底部的main()
语句:默认情况下会返回0(成功,真的)。