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

时间:2012-10-17 09:42:17

标签: qt4

我不确定QFile的行为,

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

嗯,它不像C中的FILE *指针(你必须关闭并释放),如果我不调用QFile :: close()(它会在销毁时自动执行)会不会有问题?< / p>

2 个答案:

答案 0 :(得分:9)

是的,它会自动关闭(Qt documentation),因此无需调用close()。

答案 1 :(得分:0)

我更喜欢在函数返回之前调用fp.close():这可能没有必要但也可能没有害处。

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

@IBAction func Signup(sender: AnyObject) {

    let email = self.Email.text

    if email == "" {

        displayAlert("Error", message: "Please Enter Your Email Address")

    }   

}

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "WelcomeSignUp" {

        let destination = segue.destinationViewController as! SignUpViewController

        destination.mail = Email.text!

    }

}

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

作为一个额外的优势,将QFile :: open()与QFile :: close()匹配将确保在下次调用函数QFile::close()时可以再次正确打开该文件。