Извините за немой вопрос, но я работаю со спокойным и C++ впервые и работаю через учебное руководство и некоторые образцы.
Одна вещь, которая была упомянута, состояла в том, что спокойный материал не должен быть явно удален. Так, основной вопрос, это также относится к наборам спокойного материала? Как говорят, что я хочу динамическое количество MyWidget
s, таким образом, я сохраняю a vector
или безотносительно их. Они все еще заботятся о для меня?
Как вопрос о стороне, что продолжает делать его так, я не должен волноваться о деструкторах?
Qt наверняка имеет интересную объектную модель. Когда я только начинал, меня беспокоило то, что было так много новых вызовов Foo
и никаких delete
s.
http://qt.nokia.com/doc/4.6/object.html Это хорошее место, чтобы начать изучение объектной модели.
Интересные факты: у подклассов QObject отключены методы присваивания и копирования. Цепочка дочерних и родительских объектов поддерживается внутри QObject.
Обычно при создании экземпляра подкласса QObject (если вы не планируете самостоятельно управлять его указателем) вы предоставляете другой указатель QObject в качестве родителя. Затем этот «родитель» берет на себя управление только что созданным вами ребенком. Вы можете вызвать setParent () для QObject, чтобы изменить, кто им «владеет». В Qt очень мало методов, которые изменяют родительский объект объекта, и все они явно заявляют об этом в документации.
Итак, чтобы ответить на ваш конкретный вопрос: это зависит от того, как вы создали все свои экземпляры MyWidget.
Если вы создали каждую из них вместе с родителем, то нет, вам не нужно их удалять. Родитель удалит их, когда он будет удален.
Если вы храните их коллекцию QList
и не указали им родителя, то вам следует удалить их самостоятельно.
Модель управления памятью Qt основана на соотношении родитель-ребенок. Классы Qt принимают необязательно parent
в качестве параметра своего конструктора. Новый экземпляр регистрируется с этим родителем таким образом, что он удаляется, когда удаляется родитель. Если вы используете коллекцию Qt (например, QList), я полагаю, что вы можете установить список в качестве родителя его записей. Если вы используете std::vector или другой тип коллекции, вы не получите "автоматического" управления памятью.
Модель Qt делает много смысла в иерархии пользовательского интерфейса, где она совпадает один к одному с иерархией пользовательского интерфейса. В других случаях, она не всегда отображается так чисто, и вы должны оценить, имеет ли использование системы Qt смысл для конкретной ситуации. Обычные инструменты C++ все еще работают: вы можете использовать std::tr1::shared_ptr или любой из других умных классов указателей, чтобы помочь вам управлять временем жизни объекта. Qt также включает QPointer
, защищённый указатель, и пару QSharedPointer
/QWeakPointer
, которые реализуют умный указатель с вычислением ссылок и пару слабых ссылок.