Russian Qt Forum
Ноябрь 27, 2024, 13:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление объекта  (Прочитано 2633 раз)
qt_user
Гость
« : Ноябрь 18, 2011, 15:41 »

Добрый день,
возник чисто спортивный интерес по поводу удаления QState объектом QStateMachine

void QStateMachine::addState ( QAbstractState * state ) принимает указатель типа QAbstractState
если посмотреть в ассистанте описание деструктора QAbstractState::~QAbstractState () - то он совсем
не виртуальный, если же удалить объект QStateMachine, все QState удаляются правильно

Вопрос: это просто ошибка в ассистанте или эти "state" кастятся перед удалением к QState ?
Записан
BRE
Гость
« Ответ #1 : Ноябрь 18, 2011, 15:54 »

Так QAbstractState наследник QObject. А у этого деструктор виртуальный. Улыбающийся
Записан
qt_user
Гость
« Ответ #2 : Ноябрь 18, 2011, 16:14 »

Так QAbstractState наследник QObject. А у этого деструктор виртуальный. Улыбающийся

Спасибо,
наверно это мои пробелы в понимании С+, буду рад если вы объясните мне не которые вещи:

1. знаю, что если класс родитель имеет таблицу виртуальных методов, то класс наследник тоже будет
иметь таблицу виртуальных методов и свой vpointer установленный на нее, верно это?

2. так получается что деструктор живет в таблице виртуальных ф-ций если она есть?

3. Я представляю алгоритм поиска деструктора компилятором такой:
если есть vpointer, то деструктор берем с vtable, если нет вызываем по типу указателя, это верно?
Записан
andrew.k
Гость
« Ответ #3 : Ноябрь 18, 2011, 16:20 »

Деструктор не обязательно виртуальный, если есть виртуальные методы.
Он виртуальный, если его объявить виртуальным. От других вводных не зависит.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Ноябрь 22, 2011, 03:28 »

Спасибо,
наверно это мои пробелы в понимании С+, буду рад если вы объясните мне не которые вещи:

Любая функция (метод), в т.ч. и деструктор, становится виртуальной с того момента,  как её объявили таковой. В классах-наследниках ключевое слово virtual при объявлении этих функций можно не писать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.