Как предотвратить двойное удаление объекта с помощью интеллектуальных указателей?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как предотвратить двойное удаление объекта с помощью интеллектуальных указателей?

Сообщение Anonymous »

У меня есть класс, который становится владельцем своих дочерних элементов:

Код: Выделить всё

class Child
{
public:
Child() {}
~Child() {}
};

class Parent : public QObject
{
Q_OBJECT
public:
explicit Parent(QObject *parent = 0): QObject(parent) {}
~Parent()
{
qDeleteAll(m_children);
}
void addChild(Child *ch)
{
m_children.append(ch);
}
private:
QList m_children;
};

Код: Выделить всё

ChildЭкземпляры 
, добавленные в класс Parent с помощью метода addChild, будут удалены при удалении Parent.

Следующее использование приведет к двойному уничтожению дочернего элемента:

Код: Выделить всё

int main()
{
{
Parent father;
Child child;
father.addChild( &child );
}
//child is out of scope now and gets destroyed
//father gets destroyed too
//father's destructor deletes child AGAIN!
//crash!
return 0;
}
Как предотвратить это с помощью интеллектуальных указателей? QPointer доступен для унаследованных классов QObject, что делает его бесполезным в этом случае. Как еще я могу это предотвратить?

Подробнее здесь: https://stackoverflow.com/questions/262 ... t-pointers
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»