1. ホーム
  2. c++

[解決済み] コンストラクタをプライベート化する代わりに、明示的に削除するのはなぜですか?

2022-10-04 04:20:19

質問

いつ、なぜコンストラクタを明示的に削除する必要があるのでしょうか? その理由が使用されないようにするためだとすると、なぜ単に private ?

class Foo
{ 
  public: 
    Foo() = delete; 
};

どのように解決するのですか?

どうでしょう。

//deleted constructor
class Foo
{ 
  public: 
    Foo() = delete;     
  public:
    static void foo();
};

void Foo::foo()
{
   Foo f;    //illegal
}

//private constructor
class Foo
{ 
  private: 
    Foo() {}     
  public:
    static void foo();
};

void Foo::foo()
{
   Foo f;    //legal
}

基本的に別物です。 private は、そのクラスのメンバーだけがそのメソッドを呼び出したり、変数にアクセスしたりできることを伝えます(もちろん友達も)。この場合、合法的に static メソッドを呼び出すことは合法です。 private のコンストラクタを呼び出すことができます。これは削除されたコンストラクタには当てはまりません。

サンプル はこちら .