GeezerVison is showing cpprefjp.github.io — std::default_delete::コンストラクタ - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月20日 20時40分45秒 (JST)
rotarymars
が更新
履歴
編集
function
<memory>
std:: default_delete:: コンストラクタ (C++11)
// 単一オブジェクト版
constexpr default_delete () noexcept = default ; // (1) C++11
template < class U >
default_delete ( const default_delete < U >& other ) noexcept ; // (2) C++11
template < class U >
constexpr default_delete ( const default_delete < U >& other ) noexcept ; // (2) C++23
// 配列版 (default_delete<T[]>)
constexpr default_delete () noexcept = default ; // (3) C++11
template < class U >
default_delete ( const default_delete < U [] >& other ) noexcept ; // (4) C++17
template < class U >
constexpr default_delete ( const default_delete < U [] >& other ) noexcept ; // (4) C++23
概要
default_deleteオブジェクトを構築する。
(1), (3) : デフォルトコンストラクタ
(2), (4) : 変換可能な型のdefault_deleteオブジェクトから構築する
テンプレートパラメータ制約
(2) : U*がT*に暗黙変換可能であること
(4) : U(*)[]がT(*)[]に変換可能であること
いずれも、満たさない場合はオーバーロード解決に参加しない。
効果
(1), (3) : 何もしない
(2), (4) : otherからdefault_deleteオブジェクトを構築する
例外
投げない
備考
(1), (3) : = defaultで定義されるため、トリビアルなデフォルトコンストラクタである。
(4) : 配列版の変換コンストラクタは、C++17で追加された。それ以前は、default_delete<Derived[]>からdefault_delete<Base[]>のような変換ができなかった。
例
#include <memory>
// 基底クラスのポインタを介してdeleteするため、デストラクタは仮想にする
struct Base { virtual ~ Base () = default ; };
struct Derived : Base {};
int main ()
{
// (1) デフォルト構築
std::default_delete < Derived > d1 ;
// (2) 変換可能な型からの構築
// Derived*はBase*に暗黙変換可能
std::default_delete < Base > d2 = d1 ;
// (3) 配列版のデフォルト構築
std::default_delete < int [] > d3 ;
// (4) 配列版の変換可能な型からの構築
// const修飾を付加する変換は可能
std::default_delete < int [] > d4 ;
std::default_delete < const int [] > d5 = d4 ;
Derived * p = new Derived ();
d2 ( p );
}
出力
バージョン
言語
関連項目
参照