class File_pointer - 这是一个很好的c ++吗?

时间:2012-05-19 21:07:27

标签: c++ file-pointer

我的c ++程序使用了很多文件指针并且有很多返回语句 为了避免在没有关闭所有打开文件指针的情况下到达return语句,我写了这个类,基于我保证在到达return语句时自动调用所有对象的析构函数的假设。

我的假设是真的吗?
这是好的代码吗?

File_pointer.cpp中的构造函数和析构函数

File_pointer::File_pointer(string filename)
{
    fptr.open(filename.c_str());
};

File_pointer::~File_pointer()
{
    fptr.close();
};



实施实例

int main ()
{
    File_pointer myfile("myfile.txt");
    int x = 2;
    switch(x)
    {
        case 1:     return x;
        case 2:     return x;
        default:
            break;
    };

return 0;

}

3 个答案:

答案 0 :(得分:3)

  

这是真的吗?

是;具有automatic storage duration的所有对象在超出范围时都会调用它们的析构函数。

为了澄清,自动对象是一个未动态分配的非静态本地对象。

  

这是好的代码吗?

这是主观的。但我要说的是,依赖于作用域来自动调用析构函数是一种非常常见的C ++习惯用法,其名称为resource acquisition is initialisation (RAII)

std::ofstream这样的类已经使用RAII了;他们的析构函数会自动关闭文件。因此,如果您的fptrstd::ofstream,那么您的包装类完全是多余的。

答案 1 :(得分:0)

RAII,当然。

如果可以wrap resources,请使用提升智能指针。总是比你自己做的任何事情都更好地测试。但是很简单。

答案 2 :(得分:0)

我认为fptrFILE类中的File_pointer指针

虽然你的方法接近RAII范式,但我应该指出你没有适当地处理错误。

e.g。如果fopen失败怎么办?