<type_traits>

類模板
<type_traits>

std::has_virtual_destructor

template <class T> struct has_virtual_destructor;
具有虛解構函式

識別型別T是否具有虛解構函式的特性類。

只有那些解構函式被顯式宣告為虛擬函式(或繼承了具有虛解構函式的基類)的類(用, struct聯合體宣告)才具有虛解構函式。

has_virtual_destructor繼承自integral_constant,根據T的解構函式是否平凡,被分類為true_typefalse_type

模板引數

T
一個完整型別,或者void(可能帶有cv限定),或者是一個未知界限的陣列,且其元素型別是完整型別。
一個型別。
如果是類型別,它必須是一個完整型別或一個聯合體(對於聯合體,此特性類始終為 false)。

成員型別

繼承自integral_constant
成員型別定義
value_typebool
型別true_type 或 false_type

成員常量

繼承自integral_constant
成員常量定義
truefalse

成員函式

繼承自integral_constant

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// has_virtual_destructor example
#include <iostream>
#include <type_traits>

struct A { };
struct B { virtual ~B(){} };
struct C : B { };

int main() {
  std::cout << std::boolalpha;
  std::cout << "has_virtual_destructor:" << std::endl;
  std::cout << "int: " << std::has_virtual_destructor<int>::value << std::endl;
  std::cout << "A: " << std::has_virtual_destructor<A>::value << std::endl;
  std::cout << "B: " << std::has_virtual_destructor<B>::value << std::endl;
  std::cout << "C: " << std::has_virtual_destructor<C>::value << std::endl;
  return 0;
}

輸出
has_virtual_destructor:
int: false
A: false
B: true
C: true


另見