Tengo un proyecto favorito con el que experimento con las nuevas características de C++ 11. Si bien tengo experiencia con C, soy bastante nuevo en C++. Para capacitar a mí mismo en las mejores prácticas, (además de leer mucho), me he permitido algunas estrictos parámetros del compilador (usando GCC 4.4.1):¿Por qué enable_shared_from_this tiene un destructor no virtual?
-std=c++0x -Werror -Wall -Winline -Weffc++ -pedantic-errors
Esto ha funcionado bien para mí. Hasta ahora, he podido resolver todos los obstáculos. Sin embargo, tengo una necesidad de enable_shared_from_this
, y esto me está causando problemas. Me da la siguiente advertencia (error, en mi caso) al compilar mi código (probablemente provocada por -Weffc++
):
base class ‘class std::enable_shared_from_this<Package>’ has a non-virtual destructor
Así que, básicamente, soy un poco intervenidos por esta implementación de enable_shared_from_this
, porque:
- Un destructor de una clase que es previsto para la subclase siempre debe ser virtual, en mi humilde opinión.
- El destructor está vacío, ¿para qué tenerlo?
- No puedo imaginar que alguien quiera eliminar su instancia por referencia al
enable_shared_from_this
.
Pero estoy buscando maneras de lidiar con esto, así que mi pregunta es, ¿hay una forma adecuada de lidiar con esto? Y: ¿estoy en lo correcto al pensar que este destructor es falso, o hay un verdadero propósito para él?
¿Has probado la herencia privada o protegida? ¿Cambia el diagnóstico? – Tomek
Esa es una gran idea. Pero desafortunadamente, no es así. –
'-WeffC++' desencadena muchas advertencias inútiles (en relación con la biblioteca) de la biblioteca estándar, y esto se menciona [en las preguntas frecuentes] (http://gcc.gnu.org/onlinedocs/libstdc++/faq.html # faq.wefcxx_verbose) –