QTimer 指针类型和引用类型使用的区别

QTimer *timer1 = new QTimer(this); //指针类型

QTimer timer2; //引用类型

这两种用法之间的主要区别在于对象的生命周期和存储位置。

1、动态分配内存的对象*timer1 :

QTimer在创建为 *timer1 指针类型时,一定要指定this为父类,即父类为当前窗体,否则在关闭或释放当前窗体后,QTimer还在运行,会引发程序异常。

这种方式创建了一个 QTimer 对象,并通过 new 运算符动态分配了内存。*timer1 这个对象的生命周期在你显式删除它之前,或者在使用 this 作为父对象并且在this 对象被销毁时才会结束。通常,在这种情况下,你需要在适当的时候(比如对象不再需要时或者类的析构函数中)使用delete 来释放这个对象,以避免内存泄漏。

QTimer *timer1 = new QTimer(this);

connect(timer1,&QTimer::timeout,[=](){

        qDebug()<<"timer1"<

});

timer1->start(1000);

  • 这是一个指向 QTimer 对象的指针。
  • 使用动态内存分配,需要在堆上创建 QTimer 对象。
  • 开发人员负责手动分配内存和释放内存,以避免内存泄漏。使用 new QTimer(parent)  delete timer1 

2、栈上的对象timer2:

QTimer在创建为 timer2 引用对象类型时,不需要指定父类,会自动销毁。

这种方式创建的 QTimer 对象是一个栈上的局部变量,其生命周期受限于定义它的作用域。当超出该对象所在作用域时(通常是函数结束时),对象会被自动销毁。因此,在这种情况下,你不需要手动释放内存或管理对象的生命周期。

但此种方式需要将 QTimer timer2;放在*.h头文件中,并且在头文件中引用 #include  ,否则程序编译及运行不报错,但计时器不能执行。

在头文件中引用 #include 

在头文件中声名 QTimer timer2;

在代码文件cpp中写代码:

connect(&timer2,&QTimer::timeout,[=](){

        qDebug()<<"timer2"<

});

timer2.start(1000);

  • 这是一个 QTimer 对象,其生命周期由它所属的作用域管理。
  • 对象在栈上创建,当它超出了其作用域时,会自动被销毁。
  • 不需要手动释放内存。

你可能感兴趣的:(QT,C++,qt,c++)