GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • cpprefjp - C++日本語リファレンス
  • GitHub Project

This view

  • Original page
  • New address

GeezerVison is showing cpprefjp.github.io — std::default_delete::コンストラクタ - cpprefjp C++日本語リファレンス

  1. リファレンス
  2. memory
  3. default_delete
  4. コンストラクタ

最終更新日時: 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);
}

出力

バージョン

言語

  • C++11

関連項目

  • default_delete::operator()
  • unique_ptr

参照

  • LWG Issue 854. default_delete converting constructor underspecified
    • C++11で、(2)がU*からT*へ暗黙変換可能な場合にのみオーバーロード解決に参加することが規定された
  • LWG Issue 1517. default_delete's default constructor should be trivial
    • C++11で、デフォルトコンストラクタが= defaultで定義されるようになり、トリビアルになった
  • N4089 Safe conversions in unique_ptr<T[]>, revision 2
    • C++17で、配列版に変換コンストラクタ(4)が追加された
  • P2273R3 Making std::unique_ptr constexpr
    • C++23で、コンストラクタがconstexpr対応した
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.