禁止在派生类C ++中使用默认构造函数

时间:2015-08-06 18:15:22

标签: c++ inheritance constructor default-constructor

有没有办法创建基类(例如 boost :: noncopyable )并从中继承,这将禁止编译器为派生类生成默认构造函数,如果它不是由用户(开发人员)制作?

示例:

Intent

结果:

<procedure name="XXXX" securityTest="wl_unprotected"/>

3 个答案:

答案 0 :(得分:6)

使构造函数成为私有的。

protected:
    Base() = default;

答案 1 :(得分:4)

{{1}}

答案 2 :(得分:1)

根据this cppreference.com article(基本上是C ++标准12.1部分的律师对人的翻译):

  

如果没有为类提供任何类型的用户定义构造函数   类型(struct,class或union),编译器将始终声明一个   默认构造函数作为其类的内联公共成员。

Child控制隐式定义的SuperDad构造函数的唯一方法是让编译器将其定义为deleted

你可以通过使SuperDad的默认构造函数(或析构函数)删除,模糊或不可访问来实现这一点 - 但是你必须定义一些其他方法来创建基类并从所有子项中隐式使用它构造