在任何情况下,删除ctor的类都可能有用吗?

Gui*_*e D 1 c++ constructor default-constructor

我不知道为什么标准允许这种声明。

class A
{
public:
    A() : bar(0){}
    A(int foo) : bar(foo){}
private:
    int bar;
};

class B : public A
{
public:
    B() = delete;
};
Run Code Online (Sandbox Code Playgroud)

B无法实例化。

  B b1; //error: use of deleted function ‘B::B()’
  B b2(2); //error: no matching function for call to ‘B::B(int)’
Run Code Online (Sandbox Code Playgroud)

仍然适用

class A
{
public:
    A() : bar(0){}
private:
    int bar;
};

class B : public A
{
public:
    B() = delete;
};
Run Code Online (Sandbox Code Playgroud)

这使

B b1; //error: use of deleted function ‘B::B()’
Run Code Online (Sandbox Code Playgroud)

注意:这与没有默认的ctor不同:

class G
{
protected:
    int assign;
};

class H : public G
{
public:
    H() = delete;
};

Run Code Online (Sandbox Code Playgroud)

G g1; //works
//H h1; -- error: use of deleted function ‘H::H()’
Run Code Online (Sandbox Code Playgroud)

在任何情况下这都有用吗?

eer*_*ika 6

在任何情况下,删除ctor的类都可能有用吗?

可以使用类而无需创建实例。这样的类的最典型的例子是类型性状:的例如所有功能std::is_samestd::numeric_limits可以在不创建一个实例中使用。这样,可以删除其构造函数而不会丢失任何功能。

也就是说,通常不必删除此类的构造函数,并且实际上不会删除标准类型特征的隐式构造函数。删除构造函数通常仅用于删除某些构造函数,而不是全部删除。需要说明的是:仅仅因为有些不典型,并不意味着它应该是一个错误。