0

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

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

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;

}
4

3 回答 3

3

这是真的?

是的; 所有具有自动存储持续时间的对象在超出范围时都会调用其析构函数。

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

它是好代码吗?

那是主观的。但我要说的是,依靠作用域自动调用析构函数是一个非常常见的 C++ 习惯用法,以资源获取的奇怪名称而闻名,即初始化 (RAII)

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

于 2012-05-19T21:10:56.863 回答
0

雷伊,当然。

或者,如果可以的话,使用 boost 智能指针来包装资源。总是比您自己做的任何事情都经过更好的测试,无论多么简单。

于 2012-05-19T21:13:12.377 回答
0

我想那fptr是你课堂上的FILE指针File_pointer

尽管您的方法接近 RAII 范式,但我应该指出您没有正确处理错误。

例如,如果fopen失败了怎么办?

于 2012-05-19T21:13:58.390 回答