16 января 2011

Управление памятью в Qt.

Сначала я думал написать целый анализ на данную тему, и даже написал, но потом понял, что в этом нет смысла, все и так все знают. Лучше просто дам пару советов.

Совет №1.
Value-based, точнее сказать копируемые объекты, такие как QString, QSqlDatabase создавайте в стеке. Не используйте указатели для работы с этими объектами.

Совет №2.
QObject-based объекты создавайте только в куче и только с указанием родителя. К этому принципу также относяться QStandardItem, QGraphicsItem.
Исключения: модальные диалоги лучше создавать в стеке и с родителем. Первое избавит Вас от ненужной строки delete dialog, второе условие расположит диалог посередине родителя.

Совет №3 следует из двух предыдущих.
У вас нет необходимости удалять объекты, 1-й тип объектов удаляется средствами c++, 2-й тип объектов удаляется средствами Qt QObject-иерархии.

Совет №4.
Если вы используете указатель на объект в области видимости функции или в качестве члена класса, оберните его с помощью QScopedPointer. Это избавит Вас от использования оператора delete.

P.S. А вообще вот читаю сейчас о лиспе и понимаю, что эти советы ну просто мысли трех-летнего ребенка, в других инструментах можно просто не задумываться о распределении памяти.

Комментариев нет:

Отправить комментарий