Qt和C++的两个问题

王桑的一天 2019-08-17 11:53:41
问题1:

void MainWindow::Test()
{
QLabel *label;
label = new QLabel(this);
main_layout->addWidget(label);

// 这个label 不需要 置 NULL吧?
label = nulptr;
}


问题2:

struct Data {
int id;
QVector<double> x;
}

// 传递了一个有数据的 Data 指针
void MainWindow::Test(Data *data)
{
QVector<double> x{1,2,3,4,5};

// data->x 赋新值,那么旧的data->x 的内存空间,会由系统自动回收?
data->x = x;

}


...全文
212 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
芸编蕴香 2019-08-18
  • 打赏
  • 举报
回复
第一个问题,不需要,析构函数中还需要使用该指针delete分配的资源。 第二个问题 vector对象由系统维护。
幻夢之葉 2019-08-18
  • 打赏
  • 举报
回复
1)不需要:QT所有类型,如果构造函数有个参数是QOject *parent的,并且你传入一个有效的父类指针,在父对象销毁的时候回销毁子对象。如果传入nullptr,则需要手动销毁 2)QVector是栈对象,它自己的元素的内存(创建和销毁)由它自己管理。在使用者的角度,只需要清楚各类容器使用的场景和各种操作的性能即可
Qt编程小屋 2019-08-18
  • 打赏
  • 举报
回复
一、不需要;Qt中构造对象时传入父类对象指针(父对象同时会将该对象添加到自己的孩子对象列表中),可以在父对象析构时释放所有子对象,所以不必显式地释放对象。
二、取决于实际情况,但无论哪种情况都不需要去关心 data->x 的内存问题。如果 data->x 原有空间足够存放 x 的所有内容,则直接拷贝;如果不能存放,才会释放 data->x 原有空间,然后重新分配足够空间,再拷贝 x 的数据。

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧