std::meta::has_virtual_destructor
Определено в заголовочном файле <meta> | ||
|---|---|---|
consteval bool has_virtual_destructor( std::meta::info r ); | (начиная с C++26) |
Возвращает true, если r представляет тип с виртуальным деструктором. В противном случае возвращает false.
Параметры
| r | - | значение отражения |
Возвращаемое значение
true, если r представляет тип с виртуальным деструктором; в противном случае — false.
Исключения
Выбрасывает std::meta::exception, если r не представляет тип или псевдоним типа.
Примечания
Если у класса C есть открытый виртуальный деструктор, от него можно наследоваться, а производный объект можно безопасно удалить через указатель на базовый объект (GotW #18). В этом случае std::meta::is_polymorphic_type(^^C) — это true.
Пример
#include <meta>
struct S {};
static_assert(not has_virtual_destructor(^^S));
struct B
{
virtual ~B() {}
};
static_assert(has_virtual_destructor(^^B));
struct D : B
{
~D() {}
};
static_assert(has_virtual_destructor(^^D));
int main()
{
B* pd = new D;
delete pd;
}
См. также
|
(C++26)(C++26)(C++26) | проверяет, имеет ли отражённый тип не удалённый деструктор (функция) |
|
(C++26) | проверяет, является ли отражённый тип полиморфным типом класса (функция) |
|
(C++11) | проверяет, имеет ли тип виртуальный деструктор (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/has_virtual_destructor