У меня есть проект для домашних животных, с которым я экспериментирую с новыми функциями C++ 11. Хотя у меня есть опыт работы с C, я довольно новичок в C++. Для того, чтобы обучить себя в лучшие практики (кроме чтения много), я позволил некоторым жестким параметры компилятора (с помощью GCC 4.4.1):Почему у enable_shared_from_this есть не виртуальный деструктор?
-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
.
Но я ищу способы справиться с этим, так что мой вопрос в самом деле, есть ли подходящий способ справиться с этим? И: Правильно ли я полагаю, что этот деструктор фиктивный или есть реальная цель?
Вы пробовали частное или защищенное наследство? Изменяет ли он диагностику? – Tomek
Это отличная идея. Но, к сожалению, это не так. –
'-WeffC++' вызывает множество бессмысленных (как и библиотек) предупреждений из стандартной библиотеки, и об этом упоминается [в FAQ] (http://gcc.gnu.org/onlinedocs/libstdc++/faq.html # faq.wefcxx_verbose) –