ash ash - 1 month ago 12
C++ Question

why explicitly delete the constructor?

When/why would I want to explicitly delete my constructor? Assuming the reason is to prevent its usage, why not just make it

private
?

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


Thanks!

Answer

How about:

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

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

versus

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

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

They're basically different things. private tells you that only members of the class can call that method or access that variable (or friends of course). In this case, it's legal for a static method of that class (or any other member) to call a private constructor of a class. This doesn't hold for deleted constructors.

Sample here.

Comments