您的位置:首页 > 科技 > IT业 > 企业网站欣赏_软件商店怎么下载_百度竞价关键词价格查询_重庆森林电影高清在线观看

企业网站欣赏_软件商店怎么下载_百度竞价关键词价格查询_重庆森林电影高清在线观看

2024/12/23 11:32:16 来源:https://blog.csdn.net/arriettyandray/article/details/142987765  浏览:    关键词:企业网站欣赏_软件商店怎么下载_百度竞价关键词价格查询_重庆森林电影高清在线观看
企业网站欣赏_软件商店怎么下载_百度竞价关键词价格查询_重庆森林电影高清在线观看

Qt/C++提问的记录

  • 前言
  • New与Delete
  • 多态
  • 界面更新是否可以在子线程中更新
  • new与malloc
  • 总结


前言

最近被问到一些问题,对自己某方面的学习与认知进行简单记录吧!


New与Delete

首先要了解一下,C++中内存的管理。要注意区分,C++中内存需要程序员自己手动释放(似乎是软考中的一道真题)。而其他编程语言好像都是具备自动内存管理的。

再说回new和delete的使用:

  • new:用于在堆上分配内存,并调用对象的构造函数。
int* ptr = new int; // 分配一个int大小的内存,并默认初始化
int* arr = new int[10]; // 分配一个int数组,包含10个int

由于我很久没有使用C++了,数组创建时,只记得byte[],但是C++中没有byte只有char

  • delete:用于释放与new分配的内存,并调用对象的析构函数。
delete ptr; // 释放单个对象
delete[] arr; // 释放数组

多态

多态其实最简单的使用是我们在建立一个类class,这里定义的虚函数,可以在其他class继承该类的情况下,使用override来重写对应的虚函数,从而满足新类在调用情况下相同命名的函数可以实现多态。

界面更新是否可以在子线程中更新

在Qt中,界面更新通常应该在主线程中进行,因为Qt的GUI组件不是线程安全的。尝试从子线程直接更新界面可能会导致程序崩溃或不可预测的行为。

如果你需要在子线程中处理数据并更新界面,应该使用信号与槽机制来安全地从子线程通知主线程进行界面更新。

emit resultReady(flag);
m_worker = new mythread();
m_worker->moveToThread(&m_workThread);
connect(&m_workThread,&QThread::started, m_worker,&mythread::run);//线程
connect(m_worker, &mythread::resultReady, this, &Serial::on_receivResult);
connect(&m_workThread, &QThread::finished, m_worker, &QObject::deleteLater);

这里的含义是开辟一个线程,然后运行这个线程,当线程运行过程中有接收到信号,则判断接收的信号去执行相关的操作。

刚使用线程的时候,觉得很难,现在回过头来看,其他还好。C#中的线程也是需要start开始,开辟很简单,更新的时候需要使用委托来更新界面数据。两者都不能在子线程中更新控件数据。

但是在c#中的mvvm模式中,控件更新没有在XAML中刷新,可以通过绑定来更新,但是当需要动态刷新时,会遇到问题,这里涉及到invoke的调用

new与malloc

new定义的数据类型时安全的,返回一个具体类型的指针。配分失败会抛异常。

malloc是void*的指针,不对会返回nullptr。


总结

简单记录吧!
很多东西可能问的专业,我没仔细深究。问起来,自己回忆才发现很多东西用过,但是不用就忘了。
有时候可能只是简单的解决问题,没有深究问题,一种遗憾吧!
以前觉得Qt开线程很难,现在回看,还好,而现在的问题似乎是多线程之前的优先调用等其他问题了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com