通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

对于QFile,delete,deletelater(),close()有什么区别

对于QFile,delete,deletelater(),close()的区别是:delete 是C++的内存释放,会调用QFile的析构函数;deletelater是Qt Object元对象系统提供的对象删除函数,也会调用delete释放对象;close是文件关闭,对应open。

一、QFile,delete,deletelater(),close()的区别

delete 是C++的内存释放,会调用QFile的析构函数,但是析构函数中有没有默认close打开的文件。

deletelater是Qt Object元对象系统提供的对象删除函数,也会调用delete释放对象,但是会在一个事件循环结束后释放(Qt Event Loop),可以理解为把这个对象加入了一个待释放队列,Qt事件循环完成后会去释放这个对象的内存,建议不理解机制别乱用,程序复杂了崩溃都不知道怎么去查。

返回到事件循环后,调用deleteLater()的对象才会被销毁,否则不执行。

如果线程中没有运行着的事件循环,线程中的对象调用了deleteLater(),当线程结束后对象才被销毁。当名列前茅次QDeferredDeleteEvent传递给事件循环后,对象的任何待处理事件(pending events)都从事件队列中移除。

Qt中不建议手动delete掉QObject对象。原因一:不注意父子关系会导致某个对象析构两次,一次是手动析构,还有一次是parent析构,后者可能会出现delete堆上的对象。

延伸阅读:

二、QFile文件如果不存在则创建的方法

    QFile f(“./1234.ini”);

    if(!f.open(QIODevice::Append))

    {

        return 0;

    }

open里的打开模式为QIODevice::WriteOnly、QIODevice::ReadWrite、QIODevice::Append这三种的话,文件不存在则会自动创建出一个空文件出来。其他打开模式就不行。已测试。

open打开的几种模式如下:

QIODevice::ReadOnly  以只读方式打开文件

QIODevice::WriteOnly 只写方式

QIODevice::ReadWrite 读写方式

QIODevice::Append 追加模式打开,新写入文件的数据添加到文件尾部

QIODevice::Truncate  截取方式打开文件,文件原有的内容全部被删除

QIODevice::Text文本方式打开文件,读取时“\n”被自动翻译为换行符

这些取值可以用“|”组合使用,例如 QIODevice::ReadOnly | QIODevice::Text 表示以只读和文本方式打开文件。

以上就是关于对于QFile,delete,deletelater(),close()有什么区别的内容希望对大家有帮助。

相关文章