跳至主要內容

Qt

LincZero大约 1 分钟

Qt

目录

对象树和拥有权

对象模型(对象树)

parent-child机制

  • 作用

    • 介绍Qt时提到一点:一定程度简化垃圾回收机制,就是这个 —— 对象树机制
    • 这意味着类与类为包含关系时,被包含的类可以使用new方式声明而不用在析构中销毁
  • 简概

    • Qt中创建对象时会提供一个Parent对象指针
    • 注意,对象树不等于继承树
  • 原理

    • 当创建一个QObject对象时,其构造函数接受一个QObject指针作为参数,这个参数是parent,也就是父对象指针(不是父类)

      • 可以通过构造函数传入父对象指针,也可以后期通过setParent()函数修改父对象指针,一般为this

      • 这个QObject对象会自动添加到父对象的children()列表

    • 父对象析构时,这个列表中的所有对象也会被析构

    • 这种机制在GUI程序设计中相当有用

    • 即:不需要delete QObject对象及其后代类

  • 补充

    • 这里的设计可能有点反直觉:父对象指针为参,但目的是要调用*parent里面的addChildren()??方法来修改的是父对象中的children()列表
    • 之所以这样设计
      • 一是方便于为组件指定的父对象(如控件所属哪个窗口)
      • 二是以便与在构造QObject对象时完成所有操作(而不是把QObject对象传入到包含它的类的方法参数里)
      • 三是将children放在父对象中,当销毁父对象的时候不需要遍历所有对象,就能直接找到要销毁的子对象