std::has_virtual_destructor
De cppreference.com
Definido en el archivo de encabezado <type_traits> | ||
template<class T > struct has_virtual_destructor; | (desde C++11) | |
std::has_virtual_destructor
es un UnaryTypeTrait.
Si T
es un tipo con un destructor virtual, proporciona la constante miembro value
igual a true. Para cualquier otro tipo, value
es false.
Si T
es un tipo clase que no es una unión, T
deberá ser un tipo completo; de lo contrario, el comportamiento está indefinido.
El comportamiento de un programa que añade especializaciones para has_virtual_destructor
o has_virtual_destructor_v
(desde C++17) no está definido.
Contenido |
[editar]Parámetros de plantilla
T | - | Un tipo a comprobar. |
[editar]Plantilla de variable auxiliar
template<class T > inlineconstexprbool has_virtual_destructor_v = has_virtual_destructor<T>::value; | (desde C++17) | |
Heredado de std::integral_constant
Constantes miembro
value [estático] | true si T tiene un destructor virtual, de lo contrario false. (constante miembro pública estática) |
Funciones miembro
operator bool | Convierte el objeto a bool, devuelve value . (función miembro pública) |
operator() (C++14) | Devuelve value . (función miembro pública) |
Tipos miembro
Tipo | Definición |
value_type | bool |
type | std::integral_constant<bool, value> |
[editar]Notas
Si una clase tiene un destructor virtual público, puede derivarse de ella, y el objeto derivado puede ser borrado seguramente a través de un puntero al objeto base (GotW #18)
[editar]Ejemplo
Ejecuta este código
#include <iostream>#include <type_traits>#include <string>#include <stdexcept> int main(){std::cout<<std::boolalpha<<"std::string tiene un destructor virtual? "<< std::has_virtual_destructor<std::string>::value<<'\n'<<"std::runtime_error tiene un destructor virtual? "<< std::has_virtual_destructor<std::runtime_error>::value<<'\n';}
Salida:
std::string tiene un destructor virtual? false std::runtime_error tiene un destructor virtual? true
[editar]Véase también
(C++11)(C++11)(C++11) | Comprueba si un tipo tiene un destructor no eliminado (e.g., = delete). (plantilla de clase) |