对于QFile,delete,deletelater(),close()有什么区别?
一、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()有什么区别的内容希望对大家有帮助。

猜你喜欢LIKE
相关推荐HOT
更多>>
编译器与操作系统本质的区别?
一、编译器与操作系统本质的区别译程序是一支将抽象度较高的编程语言程序(也称源程序)转化成抽象度较低的编程语言程序(也称目标程序)的程序...详情>>
2023-10-13 23:05:06
C#中,事件是成员不是类型中,成员和类型有什么区别?
一、C#中,事件是成员不是类型中,成员和类型的区别编程语言的基本部分包括类型、常量、变量、运算符、语句。类型指的是数据类型,C#中类型有值...详情>>
2023-10-13 22:21:35
云计算和大数据有什么区别?
一、云计算和大数据的区别云计算和大数据都是当前IT领域热门的技术,它们有一些相似之处,比如都与大规模的计算和存储有关,但是也有一些不同之...详情>>
2023-10-13 19:34:32
多模态(multi-modal)和多视图(multi-view)有什么区别?
一、多模态(multi-modal)和多视图(multi-view)的区别多模态和多视图是两个不同的概念,涉及到不同领域的研究。多模态(multi-modal)指的是...详情>>
2023-10-13 18:34:04热门推荐
大数据分析用什么软件?
沸编译器与操作系统本质的区别?
热Rust使用crate名和crate关键字有什么区别?
热C#中,事件是成员不是类型中,成员和类型有什么区别?
新安卓开发的开发工具Eclpise和AndroidStudio有什么区别?
C++虚函数和C#虚函数的区别?
大数据与数据库有什么区别?
Kaggle的比赛和平时的数据分析有什么区别?
云计算和大数据有什么区别?
数据中台和业务中台有什么区别?
多模态(multi-modal)和多视图(multi-view)有什么区别?
随机优化、鲁棒优化和分布鲁棒优化有什么联系和区别?
对于QFile,delete,deletelater(),close()有什么区别?
cmnet和cmtds的区别?
技术干货






