У меня есть любимый проект, с которым я экспериментирую с новыми функциями C ++ 11. Хотя у меня есть опыт работы с C, я довольно плохо знаком с C ++. Чтобы освоить лучшие практики (помимо большого чтения), я включил некоторые строгие параметры компилятора (используя GCC 4.4.1):
-std=c++0x -Werror -Wall -Winline -Weffc++ -pedantic-errors
Это хорошо сработало для меня. До сих пор мне удавалось устранить все препятствия. Тем не менее, мне нужно enable_shared_from_this
, и это вызывает у меня проблемы. При компиляции моего кода я получаю следующее предупреждение (в моем случае ошибка) (вероятно, вызвано -Weffc++
):
base class ‘class std::enable_shared_from_this<Package>’ has a non-virtual destructor
Так что, в принципе, я немного ошибаюсь в этой реализации enable_shared_from_this
, потому что:
- Деструктор класса, который предназначен для подклассов должен всегда быть виртуальным, ИМХО.
- Деструктор пуст, зачем его вообще?
- Не могу представить, чтобы кто-нибудь захотел удалить свой экземпляр по ссылке
enable_shared_from_this
.
Но я ищу способы справиться с этим, так что мой вопрос действительно, есть ли правильный способ справиться с этим? И: правильно ли я считаю, что этот деструктор фальшивый или в этом есть реальная цель?