Qt4 在这种情况下,我真的需要调用QFile::close()吗?

Qt4 在这种情况下,我真的需要调用QFile::close()吗?,qt4,Qt4,我不确定QFile的行为 bool Class::Function (const QString & name) { QFile fp (name); if (fp.open (QIODevice::ReadOnly)) { // read file return false; } return true; } 嗯,它不像C中的文件*指针(必须关闭并释放),如果我不调用QFile::close()(它在销毁时会自动执行吗?QFile对象在其析构函

我不确定QFile的行为

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

嗯,它不像C中的文件*指针(必须关闭并释放),如果我不调用QFile::close()(它在销毁时会自动执行吗?

QFile
对象在其析构函数时自动关闭();因此,无需显式调用
close()

我更喜欢在函数返回之前调用fp.close():这可能不是必需的,但也可能不会有害

Qt文档可能无法反映实际代码。例如,以下是Qt 5.5.0中的源代码:

/*!
    Destroys the file object, closing it if necessary.
*/
QFile::~QFile()
{
}
因此,析构函数中不会自动调用
QFile::close()。文档可能需要更新


另外一个优点是,将QFile::open()与QFile::close()匹配将确保下次调用function
bool Class::function()
时可以正确地再次打开该文件。

QFile
继承了
QFileDevice
,后者确实在其析构函数中调用了
QFileDevice::close()
。您是对的。我忘了检查
QFile
类的继承链。因此,在这种情况下不需要调用close()函数。感谢您指出这一点。现在我看到了使用继承的另一个缺点:文档必须复制到其派生类中,就像
QFileDevice
->
QFile
一样。我不确定是否有更好的方法在继承链中的所有类中引入相同的功能。一些文档工具支持将超类文档插入派生类文档的特殊命令。如果在主代码之外向文档中添加继承链是“更好的方法”,则值得怀疑。