Spec-Zone.ru › C++

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;
}

См. также

is_destructible_typeis_trivially_destructible_typeis_nothrow_destructible_type
(C++26)(C++26)(C++26)
проверяет, имеет ли отражённый тип не удалённый деструктор
(функция)
is_polymorphic_type
(C++26)
проверяет, является ли отражённый тип полиморфным типом класса
(функция)
has_virtual_destructor
(C++11)
проверяет, имеет ли тип виртуальный деструктор
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/has_virtual_destructor

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API