2012-10-17 115 views
3

我不知道QFile时的行为,在这种情况下,我真的需要调用QFile :: close()吗?

bool Class::Function (const QString & name) 
{ 
    QFile fp (name); 
    if (fp.open (QIODevice::ReadOnly)) 
    { 
    // read file 
    return false; 
    } 
    return true; 
} 

嗯,它不是像在C(你必须关闭并免费)的文件*指针,这会是一个问题,如果我不叫一个QFile :: close()(它是否在销毁时自动执行)?

回答

8

是的,它会自动(Qt documentation)关闭,所以没有必要调用close()。

0

我喜欢调用函数返回前fp.close():这可能不是必要的,但未必是有害的任何。

Qt文档可能不会反映出实际的代码。例如,以下是在Qt的5.5.0源代码:

/*! 
    Destroys the file object, closing it if necessary. 
*/ 
QFile::~QFile() 
{ 
} 

所以QFile::close()不会自动析构函数调用。文档可能需要更新。

作为一个附加优势,使用QFile :: close()匹配QFile :: open()将确保在下一次调用函数bool Class::Function()时可以再次正确打开该文件。

+2

'QFile'继承'QFileDevice',它的析构函数确实调用了'QFileDevice :: close()'。 – rsht

+0

你说得对。我忘了检查'QFile'类的继承链。所以在这种情况下不需要调用close()函数。感谢您指出了这一点。 – jonathanzh

+0

现在我看到了使用继承的另一个缺点:必须将文档复制到其派生类中,例如'QFileDevice' - >'QFile'。我不确定是否有更好的方法来在继承链中的所有类中提供相同的功能。 – jonathanzh

相关问题