Qt [GC9-12]:中途遇到问题解决 析构函数无法释放资源

简介: Qt [GC9-12]:中途遇到问题解决 析构函数无法释放资源

image.png

基于Qt的汽车仪表模拟


在我准备开始写HUD的时候,发现一个新的问题。


那就是我开始将我的资源释放都写在了控制台的析构函数中,但是呢,在程序结束的时候却不会释放我的资源,这点搞得我好烦啊,析构函数不就是在程序结束的时候释放资源吗。



那么具体表示就是我在控制台中创建了HUD窗口,并且在控制台的析构函数中实现了对HUD窗口的回收。但是呢,结果却是当我结束控制台程序的时候,HUD窗口并没有随之消失,依旧显示在说面上。代码如下

ControlPanel::~ControlPanel()
{ 
    if(timer_Change_Jianwei_Color)
    {
        timer_Change_Jianwei_Color->stop();
        delete timer_Change_Jianwei_Color;
        timer_Change_Jianwei_Color = NULL;
    }
    if(timer_Get_Current_Time)
    {
        timer_Get_Current_Time->stop();
        delete timer_Get_Current_Time;
        timer_Get_Current_Time = NULL;
    }
    if(myHUD)
    {
        myHUD->close();
        delete myHUD;
        myHUD = NULL;
    }
    delete ui;
}

对应的解决方法是啥,其实很很简单,就是我自己写一个资源回收的含,在控制台程序结束的时候先调用我的资源回收,完了吧控制台的关闭函数写在我的资源函数回收里面就好了。代码如下

void ControlPanel::my_Close()
{
    if(timer_Change_Jianwei_Color)
    {
        timer_Change_Jianwei_Color->stop();
        delete timer_Change_Jianwei_Color;
        timer_Change_Jianwei_Color = NULL;
    }
    if(timer_Get_Current_Time)
    {
        timer_Get_Current_Time->stop();
        delete timer_Get_Current_Time;
        timer_Get_Current_Time = NULL;
    }
    if(myHUD)
    {
        myHUD->close();
        delete myHUD;
        myHUD = NULL;
    }
    this->close();
}

image.png

目录
相关文章
|
2月前
|
Java 程序员 编译器
【C/C++析构函数 】C++中的“垃圾回收”机制_析构
【C/C++析构函数 】C++中的“垃圾回收”机制_析构
32 0
|
4月前
|
架构师 C语言 C++
内存泄漏专题(2)如何判断程序有内存泄露
内存泄漏专题(2)如何判断程序有内存泄露
28 1
|
4月前
|
C++
C++多线程场景中的变量提前释放导致栈内存异常
C++多线程场景中的变量提前释放导致栈内存异常
26 0
|
7月前
|
缓存
HOperatorSet.GenRandomRegions 有内存泄漏或缓存,释放不掉
HOperatorSet.GenRandomRegions 有内存泄漏或缓存,释放不掉
|
10月前
|
Java 应用服务中间件 Linux
39-无限制的调用方法是如何让线程的栈内存溢出的?
《Java虚拟机规范》 明确允许Java虚拟机实现 自行选择是否支持栈的动态扩展, 而HotSpot虚拟机的选择是不支持扩展, 所以除非在创建线程申请内存时就因无法获得足够内存而出现OutOfMemoryError异常, 否则在线程运行时是不会因为扩展而导致内存溢出的, 只会因为栈容量无法容纳新的栈帧而导致StackOverflowError异常。
54 0
|
存储 Web App开发 JSON
检查自己的代码是否存在内存泄露
造成内存泄露的根本原因就是我们写的代码中存在某些对象长期占用内存,得不到释放,且这个对象占用的内存会逐步增加,导致 v8 无法回收,从而造成的服务的异常和不稳定,甚至是服务的中断和崩溃。
252 0
检查自己的代码是否存在内存泄露
|
Java 数据库 Android开发
JVM 系列(6)吊打面试官:为什么 finalize() 方法只会执行一次?
JVM 系列(6)吊打面试官:为什么 finalize() 方法只会执行一次?
142 0
JVM 系列(6)吊打面试官:为什么 finalize() 方法只会执行一次?
|
iOS开发
iOS开发:block死循环及__weak弱引用提前释放的问题解决
block死循环及__weak弱引用提前释放的问题解决
289 0
|
Java
如何避免忘记清理 ThreadLocal ?
hreadLocal 可以解决“线程安全问题”。 也可以作为上下文暂存数据以备后续步骤获取。 但是 ThreadLocal 用不好的确容易产生故障,因而有些团队不允许使用 ThreadLocal。 最核心的一个原因是很容易忘记清理,在线程池环境下复用导致串环境。 那么,有什么优雅的解法没?本文给出自己的一个解法。
650 0
如何避免忘记清理 ThreadLocal ?