Qt QDialog界面delete问题,新人求解

张三先生呐 2020-05-20 09:12:18
class test_menu : public QWidget
{
Q_OBJECT
public:
explicit test_menu(MainWindow *parent = 0);
~test_menu();

QDialog *current_code_panel;
}

class test_code : public QDialog
{
Q_OBJECT

public:
explicit test_code(test_menu *parent=0);
~test_code();
}

void test_menu::createCodePanel()
{
current_code_panel = new code_mov(this);
}

void test_menu::delCurrentPanel()
{
/*方式一*/
delete ((test_code*)current_code_panel);
/*方式二*/
delete current_code_panel;
/*方式三(调用其他地方delete test_menu类的函数)*/
emit CloseTestMenuPanel
}

上面三种delete test_code的方式 都是正确的吗 第二种方式会不会造成内存泄漏?
...全文
460 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
张三先生呐 2020-05-21
  • 打赏
  • 举报
回复
引用 4 楼 dinjay 的回复:
如果current_code_panel在new的时候,parent设置的就是test_menu,而你可以保证test_menu正常delete的话,那current_code_panel就不需要手动delete. Qt的内存回收机制是,当父类为QObject子类时,只要父类对象保证正常释放,其children都会自动delete。
感谢解答 您说的这个我是清楚的 工程中的test_menu是长存的 不会delete的 我找了一下 我的问题应该是delete指向派生类的基类指针是不是存在内存泄漏问题 已经大概了解了
dinjay 2020-05-21
  • 打赏
  • 举报
回复
如果current_code_panel在new的时候,parent设置的就是test_menu,而你可以保证test_menu正常delete的话,那current_code_panel就不需要手动delete.
Qt的内存回收机制是,当父类为QObject子类时,只要父类对象保证正常释放,其children都会自动delete。
张三先生呐 2020-05-20
  • 打赏
  • 举报
回复
引用 2 楼 管理員 的回复:
我听说,Qt里面,都应该调用 deleteLater() 来删除
多线程 中途随时会调用 对Qt流程机制不太清楚 不太敢用这种
王桑的一天 2020-05-20
  • 打赏
  • 举报
回复
我听说,Qt里面,都应该调用 deleteLater() 来删除
张三先生呐 2020-05-20
  • 打赏
  • 举报
回复
自问自答吧 https://blog.csdn.net/Code_GodFather/article/details/6648033?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

16,212

社区成员

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

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