﻿# V1110\. Constructor of a class inherited from 'QObject' does not use a pointer to a parent object\.

Анализатор обнаружил унаследованный от 'QObject' класс, конструктор которого принимает в качестве параметра указатель на 'QObject', но не использует его для организации связи "родитель — ребёнок"\.

Производные от типа 'QObject' объекты организуются в деревья со связями "родитель — ребёнок"\. При создании очередного объекта передаётся указатель на объект\-родитель\. В объекте\-родителе создающийся объект добавляется в список дочерних\. Благодаря этому, когда произойдёт удаление родительского объекта, также удалятся и все его дочерние объекты\.

Рассмотрим пример:

```cpp
class BadExample : public QObject
{
public:
  BadExample(QObject *parent) : ui(new UI::BadExample)
  {  
    ui->setupUi(this);
  };
};
```

В конструктор класса 'BadExample' передаётся указатель на родительский объект\. Однако он не передаётся в конструктор базового класса и не используется внутри тела конструктора\.

Исправленный пример:

```cpp
class GoodExample1 : public QObject
{
public:
  GoodExample1(QObject *parent)
    : QObject (parent), ui(new UI::GoodExample) 
  { 
    /*....*/ 
  };
};
```

Анализатор не выдаст предупреждение в следующих случаях\.

**Случай N1**\. Параметр безымянный\. Это значит, что программист не хочет отдавать управление объектом в систему отслеживания Qt:

```cpp
class GoodExample2 : public QObject
{
public:
  GoodExample2(QObject *) { /* .... */ };
};
```

**Случай N2**\. Параметр сознательно не используется для организации связи "родитель — ребёнок"\. В конструктор родительского класса явно передаётся нулевой указатель:

```cpp
class GoodExample3 : public QObject
{
public:
  GoodExample3(QObject *parent) : QObject { nullptr } { /* .... */ };
};
```

**Случай N3\.** Параметр передаётся в функцию [QObject::setParent](https://doc.qt.io/qt-6/qobject.html#setParent):

```cpp
class GoodExample4 : public QObject
{
public:
  GoodExample4(QObject *parent)
  {
    setParent(parent);
  };
};
```