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