当前位置: 代码迷 >> QT开发 >> 关于QLocalSocket ( QObject * parent = 零 )中的parent
  详细解决方案

关于QLocalSocket ( QObject * parent = 零 )中的parent

热度:390   发布时间:2016-04-25 03:42:07.0
关于QLocalSocket ( QObject * parent = 0 )中的parent
    这个传进去的parent参数是父对象吗?我知道如果parent=0的话,就是没有父对象。
    如果说parent参数是父对象的话,不是说父对象指的是类继承下来的啊,怎么这里没有继承啊?哪里来的父对象?虽然都是继承于QObject。
举例吧:
class A  : public QObject
{
    Q_OBJECT
public:
    QLocalServer*       QLS;
    A(QObject *parent) : QObject(parent)
    {    
        QLS = new QLocalSocket(this);
    }
    ~A()
    {
        delete QLS;
    }
};

    上面的这句 QLS = new QLocalSocket(this);中的this指的是A类对象吧。A和QLocalServer都继承于QObject。现在QLocalServer作为A的成员变量了,不存在继承关系吧。是组合关系吧。但是把this(A类对象)传给QLocalServer对象(QLS),并且作为QSL的父对象,这可以吗?(这是在设置QLocalSocket的父对象为A对象吗)  要知道QLocalServer并不是继承于A的。
求解释!
     如果A成为QLocalServer的父对象,那么delete QLS;可以省略吧。因为Qt里当设置了某一个对象的父对象时,删除父对象时自动会删除子对象的。

------解决方案--------------------
析造函数里不需要delete QLS了
------解决方案--------------------
我只能说,你自己的分析已经很到位了。parent是所有QObject及其派生类的特征之一,它的作用就是内存回收。至于楼主关于继承方面的疑惑,提醒一下,父类与父对象有着本质的区别。QObject是类A和QLocalSocket类的父类,而类A的对象是QLS的父对象。这不难理解吧?
------解决方案--------------------
LZ混淆了父类和父对象的意义。
举个简单的例子,A 和 B 都是QWidget的派生类,父类都是QWidget。
若我在B的实现里
A *a = new A(this); 
那么a的父对象就是B了。正如LS所说,意义在于内存回收。也就是说当B的实例delete时,a不用你手动清理,而是Qt帮你清理了。
------解决方案--------------------
LS还少说了点,没有传父类,你会看到有两个widget,而传了父类,你会发现,A和B是一个整体。
  相关解决方案