Название: Удаление обьекта по указателю Отправлено: JamS007 от Июнь 22, 2010, 17:41 Здравствуйте,
в программе использую унаследованный от QPushButton класс (PropertyButton). Код: PropertyButton *removeUserBtn = new PropertyButton(this,item); Обьекты даного класса пихаю в QTableWidget->setCellWidget(...). Для корректной работы с памятью хочу удалить динамично созданный обьект, ссылку на него получаю функцией Код: QWidget * QTableWidget::cellWidget ( int row, int column ) const но, как видно из определения, функция возвращает указатель на виджет, то есть типы QWidget и PropertyButton могут не совпадать по размеру. Хочу спросить, корректно ли в даном случае удалять обьект по указателю типа QWidget, или все-же стараться получить ссылку на обьект другим путем? Название: Re: Удаление обьекта по указателю Отправлено: BRE от Июнь 22, 2010, 17:42 Хочу спросить, корректно ли в даном случае удалять обьект по указателю типа QWidget, или все-же стараться получить ссылку на обьект другим путем? Корректно. Деструктор виртуальный еще от QObject.Название: Re: Удаление обьекта по указателю Отправлено: Igors от Июнь 22, 2010, 17:52 К слову сказать, непонятно почему разрешается удалять константный указатель - ведь данные на которые он указывает будут изменены
Название: Re: Удаление обьекта по указателю Отправлено: pastor от Июнь 22, 2010, 17:58 А где тут константный указатель?
Название: Re: Удаление обьекта по указателю Отправлено: lit-uriy от Июнь 22, 2010, 18:10 Igors, там только метод константный, который возвращает не константный указатель.
Сам метод не изменяет класса Название: Re: Удаление обьекта по указателю Отправлено: BRE от Июнь 22, 2010, 18:26 В данном случае (с QTableWidget), наверное, корректней удалять виджет через:
Код
Название: Re: Удаление обьекта по указателю Отправлено: Igors от Июнь 22, 2010, 19:31 А где тут константный указатель? А я и не говорил что здесь он есть :) Код: const Coordinate * test = &theCoord; Возвращаясь к теме - вероятно возвращаемый указатель на QWidget удалять можно, т. к. он сообщит об удалении родителю и.т.д. Но вариант BRE выглядит проще и надежнее. Название: Re: Удаление обьекта по указателю Отправлено: lit-uriy от Июнь 22, 2010, 19:33 да, BRE, действительно.
Хотя и не логично. Уже сложилась традиция именовать методы в Qt для "вытаскивания" - take. Логичнее было бы сделать метод takeCellWidget, который бы вынимал виджет из ячейки. Название: Re: Удаление обьекта по указателю Отправлено: JamS007 от Июнь 22, 2010, 19:39 Код: void QTableWidget::removeCellWidget ( int row, int column ) есть еще и такой метод, вопрос только в том, удаляет ли он обьект физически (из памяти) или только выниает из ячейки и при этом выделенная память остаеться. Название: Re: Удаление обьекта по указателю Отправлено: BRE от Июнь 22, 2010, 19:48 Код: void QTableWidget::removeCellWidget ( int row, int column ) есть еще и такой метод, вопрос только в том, удаляет ли он обьект физически (из памяти) или только выниает из ячейки и при этом выделенная память остаеться. Код :) |