C++:默认构造函数实现
C++: default constructor implementation
我有一个从基类继承的类,该基类提供了一个受保护的构造函数,该构造函数为空。
我是否有必要在派生类中实现空白构造函数(和析构函数(,或者编译器会为我生成合适的构造函数(和析构函数(。我正在使用C++ 11。
虽然这篇文章回答了这些问题的一些问题(默认构造函数和析构函数的"=default"与"{}"有何不同?(,但我最感兴趣的是派生类时的行为。
所以我有这样的东西:
template<typename EnumClass>
class IVCounter
{
protected:
//!
//! brief Ensure that this base class is never instantiated
//! directly.
//!
IVCounter() {}
public:
//!
//! brief Virtual destructor
//!
virtual ~IVCounter() {}
};
class Derived: public IVCounter<SomeType>
{
// Do I have to do this?
Derived()
: IVCounter()
{}
~Derived() {}
};
或者也许在派生中我可以简单地做:
Derived() = default;
~Derived() = default;
或者甚至可能完全省略它?
这里不需要显式构造函数。隐式默认构造函数就足够了。草案 N4659 说 15.6.2 初始化基和成员 [class.base.init] § 13:
在非委托构造函数中,初始化按以下顺序进行:
- 首先,并且仅对于派生最多的类 (4.5( 的构造函数,虚拟基类初始化于 它们出现在基类有向无环图的深度优先从左到右遍历上的顺序, 其中"从左到右"是基类在派生类基说明符列表中的出现顺序。
- 然后,直接基类按照它们出现在基说明符列表中的声明顺序进行初始化(无论 mem 初始值设定项的顺序如何(。
- 然后,按照非静态数据成员在类定义中声明的顺序初始化它们 (同样,无论 mem 初始值设定项的顺序如何(。
- 最后,执行构造函数主体的复合语句。
隐式默认构造函数只有一个空主体,但对象的构造意味着构造其基类
是的。 编译器将生成空白构造函数,您不需要。
默认生成的构造函数将是public
,所以下面就足够
class Derived: public IVCounter<SomeType>
{
};
相关文章:
- 通过构造函数动态确定类实现
- 运算符+ 的规范实现涉及额外的移动构造函数
- 类中的数组变量C++导致"was not declared in this scope"实现文件的一个函数中错误,但在构造函数中不会导致错误
- 如何为具有私有成员的派生类实现移动构造函数
- 如何正确实现具有原始指针的类的复制构造函数?
- 复制构造函数和赋值运算符的值类实现
- 如何实现共享数据的复制构造函数
- 嵌套的模板结构构造函数实现
- 为什么<T> LLVM 中的预期为 Expect&&... 实现两个构造函数<T>?
- 在C++中正确实现复制构造函数
- 如何实现构造函数,使其仅接受使用 typeid 的输入迭代器?
- 如何将深拷贝构造函数实现到链表中?
- 如何在派生类上强制实现特定数据类型的构造函数?
- 如何实现内联显式类的构造函数?
- C++头/实现文件中的默认和重载构造函数?
- C++:默认构造函数实现
- std::sort 一个实现了移动构造函数的类
- 实现标记联合的移动构造函数
- 我如何实现从其基类获取变量的构造函数
- 实现构造函数时出现LNK2019错误