COM-подобные интерфейсы предупреждают о не виртуальном деструкторе - PullRequest
2 голосов
/ 20 июня 2009

Есть ли способ сообщить gcc, что компилируемому абстрактному классу не нужен виртуальный деструктор (как никогда не бывает у COM-объектов)? Например, nsISupports всегда жалуется на отсутствующий виртуальный деструктор. Отключение предупреждения не поможет, так как у меня могут быть классы, не похожие на COM, где я хочу это предупреждение.

Так что __attribute __ ((com_interface)) устарел и изменил только макет vtable. Есть ли другой __attribute__, где я могу сказать компилятору, что не хочу, чтобы меня предупреждали об отсутствующем деструкторе в этом классе?

Ответы [ 3 ]

1 голос
/ 20 июня 2009

Отсутствует предупреждение о виртуальном дторе по определенной причине - главным образом потому, что это отладочный кошмар для отслеживания, особенно в большой и сложной базе кода
У вас может быть очень конкретная причина для этого, но спросите себя, что произойдет, если класс будет подвергнут рефакторингу, так что его использование изменится позже в дальнейшем?

1 голос
/ 20 июня 2009

Я думаю, вам следует снова отключить это предупреждение. Это там по причине. Нельзя помещать виртуальный деструктор в ваш класс сегодня, но вы не можете точно предсказать, как ваш класс будет использоваться в будущем.

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

Также вы можете спросить себя

Что я получу, сделав его не виртуальным

Вы упомянули наличие абстрактного класса, поэтому я предполагаю, что он имеет хотя бы одну виртуальную функцию. Таким образом, создание виртуального деструктора не добавляет к объекту v-таблицу, а просто расширяет ее, добавляя еще один член.

Я не вижу реальной выгоды в том, чтобы сделать это не виртуальным. Только проблемы.

0 голосов
/ 20 июня 2009

Возможно, вы захотите использовать пару диагностических прагм . В противном случае #pragma GCC system_header отключает все предупреждения в данном файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...