删除构造函数是继承的吗?

时间:2014-08-02 20:57:47

标签: c++ inheritance c++11 constructor

使用关键字delete可以防止编译器自动添加某些构造函数的标准实现。

此删除是否继承到子类?

2 个答案:

答案 0 :(得分:8)

显然,但我不会确切地说该属性是不健康的。这是因为编译器生成的派生类构造函数使用了基类构造函数。例如,编译器生成的派生类的默认构造函数使用基类的默认构造函数。因此,如果基类默认构造函数不存在,无论出于何种原因(无论是显式删除还是其他原因),编译器都无法为派生类生成默认构造函数。但这并不能阻止您为派生类创建自己的构造函数,该构造函数使用与删除的基类构造函数不同的基类构造函数。

答案 1 :(得分:1)

  

使用关键字delete可以防止编译器自动添加某些构造函数的标准实现。

嗯,不是真的。是的,它确实实现了这个目的。但它也会阻止自己实现该构造函数。

一般而言,构造函数不是继承的。删除基类中的构造函数 not 会导致派生类中的相应构造函数也被删除。它 强制编译器隐式地将派生类中的相应构造函数定义为已删除---但仅限于您自己未定义它。

相关问题