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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Просветите новичка  (Прочитано 4126 раз)
Ced
Гость
« : Май 06, 2017, 11:41 »

Код:
C:\Qt\5.8\mingw53_32\include\QtCore\qlist.h:493: предупреждение: deleting object of polymorphic class type 'Method' which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
         while(from != to) --to, delete reinterpret_cast<T*>(to->v);
                               ^

Чего он ко мне привязался?
Записан
Ced
Гость
« Ответ #1 : Май 06, 2017, 12:07 »

Цитировать

Тут прочитал, в чем проблема. Но там не сказано, как правильно.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 06, 2017, 12:12 »

Сообщает что класс Method полиморфный (имеет хотя бы 1 virtual), но деструктор не virtual. Это чревато утечками и др неприятностями, сделайте его виртуальным
Код
C++ (Qt)
class Method {
public:
...
virtual ~Method( void );
};
Записан
Ced
Гость
« Ответ #3 : Май 06, 2017, 19:37 »

Сообщает что класс Method полиморфный (имеет хотя бы 1 virtual), но деструктор не virtual. Это чревато утечками и др неприятностями, сделайте его виртуальным
Код
C++ (Qt)
class Method {
public:
...
virtual ~Method( void );
};

А содержимое деструктора писать надо, или достаточно объявить?
Записан
Ced
Гость
« Ответ #4 : Май 06, 2017, 22:17 »

Сообщает что класс Method полиморфный (имеет хотя бы 1 virtual), но деструктор не virtual. Это чревато утечками и др неприятностями, сделайте его виртуальным
Код
C++ (Qt)
class Method {
public:
...
virtual ~Method( void );
};

Спасибо. Вроде разобрался. Компилятор не ругается. Посмотрим, как заработает, когда запущу.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Май 06, 2017, 22:24 »

Компоновщик не справится без тела деструктора. Да и в таблицу виртуальных методов непонятно, что записывать напротив деструктора.
Можно попросить компилятор сгенерировать деструктор по умолчанию
Код
C++ (Qt)
class Method {
virtual ~Method() = default;
};
Или дать его определение (пустое тело).
Записан
Ced
Гость
« Ответ #6 : Май 06, 2017, 22:49 »

Компоновщик не справится без тела деструктора. Да и в таблицу виртуальных методов непонятно, что записывать напротив деструктора.
Можно попросить компилятор сгенерировать деструктор по умолчанию
Код
C++ (Qt)
class Method {
virtual ~Method() = default;
};
Или дать его определение (пустое тело).

Написал деструктор явно. Посмотрю, как будет работать. Если не получится, попробую воспользоваться =defaut
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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