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)
在任何情况下这都有用吗?
在任何情况下,删除ctor的类都可能有用吗?
可以使用类而无需创建实例。这样的类的最典型的例子是类型性状:的例如所有功能std::is_same和std::numeric_limits可以在不创建一个实例中使用。这样,可以删除其构造函数而不会丢失任何功能。
也就是说,通常不必删除此类的构造函数,并且实际上不会删除标准类型特征的隐式构造函数。删除构造函数通常仅用于删除某些构造函数,而不是全部删除。需要说明的是:仅仅因为有些不典型,并不意味着它应该是一个错误。