目录

对于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()有什么区别的内容希望对大家有帮助。